• 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、

     

    
    
    
    
    
    
    
    
     


  • 相关阅读:
    实验四实验报告————Android基础开发
    结对编程之四则运算——第二阶段报告
    实验三实验报告
    结对编程之四则运算——第一阶段报告
    第九周作业
    第八周作业
    第七周实验 实验2
    第七周作业
    第五周作业
    20155336 2017-2018 1 《信息安全系统设计基础》2017-9-27课堂实践
  • 原文地址:https://www.cnblogs.com/rnanprince/p/10676630.html
Copyright © 2020-2023  润新知