python-数据处理1

  1. 读取csv数据文件

    numpy读取csv

    1
    2
    from numpy import genfromtxt
    data = genfromtxt('my_data.csv')

    pandas读取csv

    1
    data = pd.read_csv('my_data.csv') 

    csv模块读取

    1
    2
    3
    4
    5
    6
    7
    8
    import csv
    csvreader = csv.reader(open("my_data.csv")) #csv.reader()读取后是一个对象
    my_data = list(csvreader) #将对象转换成列表
    #对list的每一行数据操作
    patriots_wins = 0
    for row in my_data:
    if row[2] == "New England Patriots":
    patriots_wins += 1
  2. range()不可以用于浮点数而np.arange()可以

  3. import numpy 和 from numpy import * 的区别

  1. list, dict, numpy.ndarray, dataframe数据格式如何转换?

    1
    2
    3
    4
    5
    6
    7
    8
    9
    data2 = list(example) #numpy.ndarray转化为list
    #=========list转化为numpy.ndarray===========
    data2 = np.array(example)
    data2 = example.values[:, :] #dataframe转化为numpy.ndarray
    #========numpy.ndarray转化为dataframe=======
    data2 = pd.DataFrame(example)
    #=========dict转化为dataframe========
    example['a'] = {'bb':2, 'cc':3}
    eee = pd.DataFrame(example)
  2. dataframe里面.values,.iloc,.ix,.loc的区别?

    只有values是将原本dataframe数据强制转化为numpy格式的数据来索引,其他3个都是对dataframe本身的数据来索引,其中iloc是对基于values的位置来索引调用,loc是对index和columns的位置来索引,而ix则是先用loc的方式来索引,索引失败就转成iloc的方式;

  3. 可否有两层,或2层以上的columns或index?有的话如何索引?

    可以,索引的话如果用loc或ix,则默认是用第一层的index或columns,最简单的方式是类似于这样:

    1
    example.loc[index1, columns1].loc[index2, columns2]
  4. numpy.ndarray和dataframe如何填补nan,inf?

  5. 对dataframe数据的index统一加一个后缀

    比如对原本dataframe下的index=[‘aa’, ‘cc’, ‘dddddd’]的,统一加上一个_5m的后缀,通常的操作大家一般就是直接example.index = [x + ‘_5m’ for x in example.index],这个其实会产生些小问题,因为默认的index是pandas.indexes.base.Index,这个格式可能会默认index里面数据的长度是确定的,导致加_5m后缀失败,所以需要先把格式强制转化为list, 像这样:

    example.index = [x + ‘_5m’ for x in list(example.index)]

  6. 关于常见的os操作,包括新建文件夹、遍历文件夹的操作问题?

    1. 新建文件夹:
    1
    2
    if not os.path.isdir(path_out):
    os.makedirs(path_out)
    1. 遍历所有文件和子文件夹:
    1
    2
    for a, b, filenames in os.walk(path_data):
    for filename in filenames:
    1. 只遍历当前文件,不包含子文件夹:
    1
    2
    3
    for a, b, filenames in os.walk(path_data):
    for filename in filenames:
    if a == path_data:
  7. 各种OI的效率快慢问题?

    1. npy读写效率最高,但最费硬盘空间,比如np.load(), np.save();
    2. csv其次,比如pd.Dataframe.to_csv(),pd.load_csv();
    3. txt读写,当然也可以很快,但是需要频繁的split,对格式规范的数据比较麻烦;
    4. 至于简单的excel和word,可以用xlrd,xlwt来操作;
  8. numpy.ndarray和dataframe如何选取满足条件的行和列数据?

    1. 根据新的columns来选取:
    1
    frame_[newcolumns]
    1. 根据新的index来选取:
    1
    frame_[frame_.index.isin(newindex)]
    1. 根据某一行或者列的条件来选取:
    1
    2
    假如是根据dataframe的第一列,必须大于start_time这个常数,frame_ = frame_.ix[:, frame_.ix[0, :] >= start_date]
    或者是根据dataframe的第一行,必须大于start_time这个常数,frame_ = frame_.ix[frame_.ix[:, 0] >= start_date, :]
  9. 如何取出一串字符串里面的字母或者数字?

    1
    2
    3
    4
    1. 取出example里面的数字:
    int(''.join(x for x in example if x.isdigit()))
    2. 取出example里面的字母:
    (''.join(x for x in example if x.alpha()))
  10. 各种merge操作?

  11. 如何计算相关性矩阵?

    将y和所有x放入到sample = numpy.ndarray下,然后直接np.corrcoef(sample ),默认的是皮尔森相关系数,当然,也可以用ranked correlation,也就是spearman correlation,可以直接用scipy.stats.spearmanr。

参考

https://zhuanlan.zhihu.com/p/21337237