zoukankan      html  css  js  c++  java
  • python学习随笔

    1、选取标签为C并且只取前两行,选完类型还是dataframe

    df = df.loc[0:2, ['A', 'C']] 
    df = df.iloc[0:2, [0, 2]] 

    不同:loc是根据dataframe的具体标签选取列,而iloc是根据标签所在的位置,从0开始计数。

    2、加减乘除等操作的,比如dataframe的一列是数学成绩(shuxue),另一列为语文成绩(yuwen),现在需要求两门课程的总和。可以使用df['shuxue'] +

    df['yuwen'](选取完之后类型为series)来获得总分,而不能使用df.iloc[:,[2]]+df.iloc[:,[1]]或df.iloc[:,['shuxue']]+df.iloc[:,['yuwen']],这会产生错误结果。

    3、使用df.icol(i)来选取列,选取完的也不是dataframe而是series,i为该列所在的位置,从0开始计数。

    4、gran = int(round(np.timedelta64(largest - second_largest) / np.timedelta64(1, 's')))  #转换成秒

    5、anoms = all_data[i][all_data[i].timestamp.isin(s_h_esd_timestamps)]

    6、periodic_maxes = df.groupby( df.timestamp.map(Timestamp.date)).aggregate(np.max).value   #按天求最大值

    7、ESD_example_data = copy.deepcopy(total_Y)

    8、对于给定的显著性水平,可以使用百分点函数(PPF)计算临界值,例如0.05(95%置信度)。

    此功能可用于SciPy中的t分布,如下所示:

      # calculate the critical value

      alpha = 0.05

      cv = t.ppf(1.0 - alpha, df)

      p值可以用t分布上的累积分布函数来计算(同样在SciPy中)。

      # calculate the p-value

      p = (1 - t.cdf(abs(t_stat), df)) * 2

    9、在Python中,如何将一个字符串数组转换成整型数组

    py2:

    >>> arr = ['22','44','66','88']

    >>> arr = map(int,arr)

    >>> print(arr)

    [22, 44, 66, 88]

    py3:

    >>> arr = ['22','44','66','88']

    >>> arr = list(map(int,arr))

    >>> print(arr)

    [22, 44, 66, 88]
    10、时间戳转换成date

    def time_to_datetime(time_at):
        str_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(1476923280))
        return pd.to_datetime(str_time)

    11、python进行数据处理——pandas的drop函数

    https://blog.csdn.net/nuaadot/article/details/78304642

    12、python 四位数整数补零

    n = "%04d" % n
    print n
    0123

    13、同名文件

    if os.path.exists(filename):
        raise ValueError("路径里千万不能有同名文件,否则会叠加文件!!!")

    14、dataframe.to_csv(),(用pandas)写入时,当数据量很大时,行写入(30分钟)要比列写入(秒),慢好几百多倍

    15、分段存储

    for i in range(0, len(data), 10000):
        data[i:i+10000]

    16、to_csv的参数设置,  'a'不覆盖

    dataframe.to_csv(filename, mode='a', header=False, encoding='utf-8', index=False)

    17、三位随机数:

    str(random.randint(100, 999))

    18、Python如何读取、拆分大文件

    pd.read_table("data/ex1.csv", chunksize=10000, header=None, sep=',')
    for chunk in data:
        print(chunk)

    19、np.float64 not float 

    datefram.astype(np.int64)

    20、dropna

    删除DataFrame中值全为NaN或者包含有NaN的列或行

    删除NaN所在的行:
    删除表中全部为NaN的行
    df.dropna(axis=0,how='all')  

    删除表中含有任何NaN的行
    df.dropna(axis=0,how='any') #drop all rows that have any NaN values
    删除NaN所在的列:
    删除表中全部为NaN的列
    df.dropna(axis=1,how='all') 
    删除表中含有任何NaN的列
    df.dropna(axis=1,how='any') #drop all rows that have any NaN values

    21、按照时间天分组

    data.groupby(data.index.map(Timestamp.date))
    结果是tuple(Timestamp.date"2019-03-05", series)

    22、连接series,,,pd.concat([data1, data2], axis=0)

    pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False)
    参数说明
    objs: series,dataframe或者是panel构成的序列lsit
    axis: 需要合并链接的轴,0是行,1是列
    join:连接的方式 inner,或者outer

    23、自定义索引:data.set_index("timestamp", drop=False, inplace=True)

    Pandas可以使用某一列来重新自定义DataFrame的索引,通过set_index()方法来实现,该方法主要有两个参数:

    • inplace,如果设置为True就不会返回一个新的DataFrame,而是直接修改该DataFrame
    • drop,如果设置为True,就会移出掉该列的数据

    24、本地时间的区别

    str_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time_at - 8 * 60 * 60))
    str_time.fromtimestamp(time_at).strftime('%Y-%m-%d %H:%M:%S')
    
    str_time = datetime.utcfromtimestamp(time_at).strftime('%Y-%m-%d %H:%M:%S')

    25、pandas.DataFrame的index重新排列(从0开始)

      重新赋值pandas.DataFrame.index即可。

    df1.index = range(len(df1))
    df1.reset_index(drop=True, inplace=True)

    26、

    list = []
    for i in range(100):
        if i % 2 == 1:
        list.append(i) 

    等价于

    list = [i for i in range(100) if i % 2 == 1]

    27、使用enumerate内置函数来给元素加上序号形成元组:

    list = ['a', 'b', 'c']
    for x in enumerate(list):
        print(x)

    运行结果为: (0, 'a') (1, 'b') (2, 'c')

    28、我们可以使用raise语句自己触发异常

    def functionName( level ):
        if level < 1:
            raise Exception("Invalid level!", level)
            # 触发异常后,后面的代码就不会再执行

    29、断言

    assert isinstance(astring, str) 

    30、Python上下文管理器与with语句

    上下文管理器的任务是:代码块执行前准备,代码块执行后收拾。

    31、使用concurrent.futures实现并行计算

    (1)创建进程池Executor

    concurrent.futures.ProcessPoolExecutor(max_workers=None)

    建立进程池Executor。max_workers表示进程池的进程数量限制,缺省为None,表示与CPU数量相同。

    concurrent.futures.ThreadPoolExecutor(max_workers=None) 

    多讲一个线程池Executor的创建。

    (2)创建子进程Future

      (a)直接提交单个子进程:

      XXX.submit(fn, *args, **kwargs)

      向进程池提交一个子进程(future对象),子进程直接开始运行,并返回该future对象。future对象对应函数fn(*args, **kwargs)。XXX为进程池Executor。

      (b)map方式(同时提交多个子进程):

      XXX.map(fn, *iterables, timeout=None, chunksize=1) 

      并发map函数,返回迭代器(与map(fn,*iterables)返回相同,只是并发执行)。注意这个并行与mulitprocessing模块中的并行也有差异,这里是同批次的子进程同步执行,直到该批次所有进程结束后,才开始下一批次执行。XXX为进程池Executor。

      fn:被调函数,
      iterables:个数与被调函数的参数个数相同(每个iterable对应一个参数)。
      timeout:最大等待时间。缺省为None,表示无限等待。
      chunksize:缺省为1,表示iterables中的元素将一次送出1个到进程池。如大于1,则一次送出chunksieze个元素到进程池。对于非常大的iterables,设置较大的chunksize,将显著加快执行速度(只对ProcessPoolExecutor有用。对ThreadPoolExecutor无用,该值忽略)。

    (3)with上下文管理

      如果直接使用executor和future,多进程执行完成后,最好手动释放资源:

      XXX.shutdown() #所有任务完成后,清理并释放进程池Executor相关的资源。

      更好的办法是采用with上下文管理:

      with concurrent.futures.ProcessPoolExecutor() as executor:
         res = executor.map(fuc, ...)

    32、知识点:
    random.random()      :返回 0 <= n < 1的随机实数。
    random.uniform(a,b) :返回 a <= n < b的随机实数。
    random.randrange([start],stop,[step]) :返回range([start],stop,[step])的随机整数。
    random.choice(seq)   :返回seq序列中的任意元素。
    random.shuffle(seq)  :随机移位。
    random.sample(seq,n) :从序列中取n个随机的元素。

    33、pandas将index转换为datetime

    df.index = pd.to_datetime(df.index)

    34、设置坐标轴

    ax = plt.gca()
    ax.set_xlabel('x-label', fontsize=fontsize)
    ax.set_ylabel('y-label', fontsize=fontsize)
    ax.set_title('Title', fontsize=fontsize)

    35、经常遇到问题 ValueError: If using all scalar values, you must pass an index,因为pandas 的dataframe需要一个可迭代的对象
    换成列表 或者加个index就可以解决这个问题

     

    36、数字转换成excel列序号:

    def convert_to_title(n):
        result = ""
        while n != 0:
            result = chr((n-1) % 26+65) + result
            n = (n-1)//26
        return result

    37、python 保留2位小数

    1、round
    In [3]: a=21.2345
    In [4]: round(a,2)
    Out[4]: 21.23
    2、%nf
    In [5]: b = '%.2f'%a
    Out[6]: '21.23'
    In [7]: b = float('%.2f'%a)
    3'{.%2f}'.format()
    In [10]: b = '{:.2f}'.format(a)
    Out[11]: '21.23'

    38、python中的sum函数.sum(axis=1)

    np.sum([[0,1,2],[2,1,3]],axis=1)

    结果就是:array([3,6])

    39、Python 字典(Dictionary) setdefault() 函数和get()方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值。

    dict.setdefault(key, default=None)
    参数

    key -- 查找的键值。
    default -- 键不存在时,设置的默认键值。
    demo:

    dict = {'Name': 'Zara', 'Age': 7}
    print "Value : %s" %  dict.setdefault('Age', None)
    print "Value : %s" %  dict.setdefault('Sex', None)
    Value : 7
    Value : None

    40、Python字符串格式化千分位逗号分隔

    print "{:,}".format(99999999)
    
    # 结果
    # 99,999,999

    41、join箭头连接

    " —> ".join(all_list)

    42、PYTHON删除某目录下的所有文件

    import shutil
    shutil.rmtree(r'G:	est')
    会删目录,如果想不删目录的话,就不能用这个函数了,需要自己写代码来递归删除文件夹中的内容,或者还是用这个函数,但是删完以后再新建文件夹。
    import shutil  
    shutil.rmtree('要清空的文件夹名')  
    os.mkdir('要清空的文件夹名')  
    os.remove() 方法用于删除指定路径的文件。如果指定的路径是一个目录,将抛出OSError。
    os.removedirs() 方法用于递归删除目录。像rmdir(), 如果子文件夹成功删除, removedirs()才尝试它们的父文件夹,直到抛出一个error(它基本上被忽略,因为它一般意味着你文件夹不为空)。
    os.rmdir() 方法用于删除指定路径的目录。仅当这文件夹是空的才可以, 否则, 抛出OSError。
    os.unlink() 方法用于删除文件,如果文件是一个目录则返回一个错误。

    递归删除目录和文件的方法(类似DOS命令DeleteTree):

    import os
    for root, dirs, files in os.walk(top, topdown=False):
        for name in files:
            os.remove(os.path.join(root, name))
        for name in dirs:
            os.rmdir(os.path.join(root, name))

    如果想把一个文件从一个文件夹移动到另一个文件夹,并同时重命名,用shutil也很简单:

    shutil.move('原文件夹/原文件名','目标文件夹/目标文件名') 

    43、求和

    sum_cnt = np.sum([x[1] for x in list])

    44、Python中Numpy库中的np.sum(array,axis=0,1,2...)

    c = np.array([[[0, 1, 2,3], 
                   [4, 5, 6,7]],
                   [[1, 2, 3,4],
                    [5,6,7,8]]]
                    
     print( c.sum(axis=0))
     print( c.sum(axis=1)) 
     print( c.sum(axis=2))  

    45、特殊用法:mat (or array).reshape(c, -1);  必须是矩阵格式或者数组格式,才能使用 .reshape(c, -1) 函数, 表示将此矩阵或者数组重组,以 c行d列的形式表示(-1的作用就在此,自动计算d:d=数组或者矩阵里面所有的元素个数/c, d必须是整数,不然报错)

    46、存文件

    output_file = open("shishi.pkl", 'wb')
    pickle.dump(data, output_file)
    output_file.close()
    input_file = open("shishi.pkl", 'rb')
    data = pickle.load(input_file)

    47、python 判断为空nan, null

    对整体的series或Dataframe判断是否未空,用isnull()
    eg:
    pd.isnull(df1) #df1是dataframe变量

    对单独的某个值判断,可以用 np.isnan()
    eg: np.isnan(df1.ix[0,3]) #对df1的第0行第3列判断


    48、Python中可以用如下方式表示正负无穷:

    float("inf"), float("-inf")

    49、log1p() 函数

    log1p() 函数返回 log(1+number),甚至当 number 的值接近零也能计算出准确结果。

    50、python numpy 一维数组转变为多维数组

    numpy.array(new_list).reshape(3,3)

    51、python生成随机数组

    https://blog.csdn.net/healthy_coder/article/details/50502643

    52、

     

    
    
    
    
    
    
    
    
     


  • 相关阅读:
    arcgis api 3.x for js 入门开发系列八聚合效果(附源码下载)
    arcgis api 3.x for js 入门开发系列七图层控制(附源码下载)
    arcgis api 3.x for js 入门开发系列六地图分屏对比(附源码下载)
    arcgis api 3.x for js 入门开发系列五地图态势标绘(附源码下载)
    arcgis api 3.x for js 入门开发系列四地图查询(附源码下载)
    Java里面获取当前服务器的IP地址
    Flutter at Google I/O 2018
    Modbus RTU 协议使用汇总
    plsql 创建表空间、用户、赋予权限
    Oracle:ODP.NET Managed 小试牛刀
  • 原文地址:https://www.cnblogs.com/rnanprince/p/10676630.html
Copyright © 2011-2022 走看看