dataframes常见方法(二) | 机器学习 |《python学习之路》| python 技术论坛-金年会app官方网
io操作
导入:
pd.read_csv,读取csv格式文件
参数解读
filepath_or_buffer 可以传入文件路径、url和文件对象
>>> import pandas as pd >>> pd.read_csv('test.csv') # 直接传入文件路径 a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 nan 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 nan 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行 >>> with open('test.csv', encoding='utf-8') as f: # 通过with open 生成文件对象读取 ... df = pd.read_csv(f) ... print(df) ... a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 nan 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 nan 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行
sep 分隔符,默认为‘,’,可以传入正则表达式
>>> pd.read_csv('test.csv',sep=',') # 默认情况下为, a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 nan 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 nan 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行 >>> df = pd.read_csv('test.csv',sep=' ') # 将分隔符改为空格后读出变为一行 a,b,c,d,e 0 0,a,2019/03/27,09:30,请问 1 1,b,2019/03/26,10:00,二 2 2,c,2019/03/25,10:30,同意 3 3,d,2019/03/24,11:00,ui 4 4,e,2019/03/23,11:30,欧赔 5 5,f,2019/03/22,13:00, 6 6,g,2019/03/21,13:30,东方 7 7,h,2019/03/20,14:00,更换 8 8,,2019/03/19,14:30,接口 9 9,j,2019/03/18,15:00,执行 >>> df['a,b,c,d,e'] 0 0,a,2019/03/27,09:30,请问 1 1,b,2019/03/26,10:00,二 2 2,c,2019/03/25,10:30,同意 3 3,d,2019/03/24,11:00,ui 4 4,e,2019/03/23,11:30,欧赔 5 5,f,2019/03/22,13:00, 6 6,g,2019/03/21,13:30,东方 7 7,h,2019/03/20,14:00,更换 8 8,,2019/03/19,14:30,接口 9 9,j,2019/03/18,15:00,执行 name: a,b,c,d,e, dtype: object
header 选择开始读取位置,默认为infer,即从第一行开始读取,则第一行为列索引。可以穿int和int列表,当传入int列表的时表头会显示传入的行,第一个标记的行为列索引,其他行在下面显示,当和skip_blank_lines=true一起使用的时候可以跳过注释和空行
>>> pd.read_csv('test.csv',header='infer') a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 nan 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 nan 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行 >>> pd.read_csv('test.csv',header=1) 0 a 2019/03/27 09:30 请问 0 1 b 2019/03/26 10:00 二 1 2 c 2019/03/25 10:30 同意 2 3 d 2019/03/24 11:00 ui 3 4 e 2019/03/23 11:30 欧赔 4 5 f 2019/03/22 13:00 nan 5 6 g 2019/03/21 13:30 东方 6 7 h 2019/03/20 14:00 更换 7 8 nan 2019/03/19 14:30 接口 8 9 j 2019/03/18 15:00 执行 >>> df = pd.read_csv('test.csv',header=[5,3]) >>> df 4 e 2019/03/23 11:30 欧赔 2 c 2019/03/25 10:30 同意 0 3 d 2019/03/24 11:00 ui 1 4 e 2019/03/23 11:30 欧赔 2 5 f 2019/03/22 13:00 nan 3 6 g 2019/03/21 13:30 东方 4 7 h 2019/03/20 14:00 更换 5 8 nan 2019/03/19 14:30 接口 6 9 j 2019/03/18 15:00 执行 >>> df['e'] c 0 d 1 e 2 f 3 g 4 h 5 nan 6 j
skip_blank_lines 表示是否跳过注释和空行,传入bool类型即可,默认为true
>>> pd.read_csv('test.csv',skip_blank_lines=true) a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 nan 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 nan 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行
name 生成新的列索引,传入列表,传入后原来的列索引会被覆盖,如果文件不包含标题行,则应显式传递header=none。此列表中的重复将导致发出用户警告。可以传入类数组
>>> pd.read_csv('test.csv')['a'] # a这一列原本是int64类型 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 name: a, dtype: int64 >>> df = pd.read_csv('test.csv',names=['java','python','c ','javascript']) # 在我们重新设置列索引这一行后由于数量没对上,a这一列变成了行索引,数据类型变成了字符串 >>> df java python c javascript a b c d e 0 a 2019/03/27 09:30 请问 1 b 2019/03/26 10:00 二 2 c 2019/03/25 10:30 同意 3 d 2019/03/24 11:00 ui 4 e 2019/03/23 11:30 欧赔 5 f 2019/03/22 13:00 nan 6 g 2019/03/21 13:30 东方 7 h 2019/03/20 14:00 更换 8 nan 2019/03/19 14:30 接口 9 j 2019/03/18 15:00 执行 >>> df['java'] a b 0 a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 nan 9 j name: java, dtype: object >>> df.loc['9','python'] # 这里通过位置可以把某一个元素取出来 '2019/03/18' # 因为a这一列与原先索引重复,可能没有说服力,我将文件中a这一列删除再次重新设置索引 >>> pd.read_csv('test.csv') b c d e 0 a 2019/03/27 09:30 请问 1 b 2019/03/26 10:00 二 2 c 2019/03/25 10:30 同意 3 d 2019/03/24 11:00 ui 4 e 2019/03/23 11:30 欧赔 5 f 2019/03/22 13:00 nan 6 g 2019/03/21 13:30 东方 7 h 2019/03/20 14:00 更换 8 nan 2019/03/19 14:30 接口 9 j 2019/03/18 15:00 执行 >>> df = pd.read_csv('test.csv',names=['java','python','c ']) >>> df java python c b c d e a 2019/03/27 09:30 请问 b 2019/03/26 10:00 二 c 2019/03/25 10:30 同意 d 2019/03/24 11:00 ui e 2019/03/23 11:30 欧赔 f 2019/03/22 13:00 nan g 2019/03/21 13:30 东方 h 2019/03/20 14:00 更换 nan 2019/03/19 14:30 接口 j 2019/03/18 15:00 执行 >>> df.loc['a','java'] '2019/03/27' # 从这里我们可以看出,在dataframe中,第一列应该一直是行索引 >>> df = pd.read_csv('test.csv',names=['java','python','c ','javascript','php','sql']) # 当给的列索引比原来的列多时,会新生产一个全为空值得列,这里显示为nan java python c javascript php sql 0 a b c d e nan 1 0 a 2019/03/27 09:30 请问 nan 2 1 b 2019/03/26 10:00 二 nan 3 2 c 2019/03/25 10:30 同意 nan 4 3 d 2019/03/24 11:00 ui nan 5 4 e 2019/03/23 11:30 欧赔 nan 6 5 f 2019/03/22 13:00 nan nan 7 6 g 2019/03/21 13:30 东方 nan 8 7 h 2019/03/20 14:00 更换 nan 9 8 nan 2019/03/19 14:30 接口 nan 10 9 j 2019/03/18 15:00 执行 nan >>> df = pd.read_csv('test.csv',names=['java','python','c ','javascript','python']) # 当出现重复的时候会出现警告,并将名字改为x:x.1 x:xxx: userwarning: duplicate names specified. this will raise an error in the future. return _read(filepath_or_buffer, kwds) >>> df java python c javascript python.1 0 a b c d e 1 0 a 2019/03/27 09:30 请问 2 1 b 2019/03/26 10:00 二 3 2 c 2019/03/25 10:30 同意 4 3 d 2019/03/24 11:00 ui 5 4 e 2019/03/23 11:30 欧赔 6 5 f 2019/03/22 13:00 nan 7 6 g 2019/03/21 13:30 东方 8 7 h 2019/03/20 14:00 更换 9 8 nan 2019/03/19 14:30 接口 10 9 j 2019/03/18 15:00 执行
index_col 将某一列或者多列变成行索引列,可传入int,对应位置的列作为索引列,在传入多个的时候,第一列为索引列,在获取元素的时候会出现警告
>>> df = pd.read_csv('test.csv',index_col=1) >>> df a c d e b a 0 2019/03/27 09:30 请问 b 1 2019/03/26 10:00 二 c 2 2019/03/25 10:30 同意 d 3 2019/03/24 11:00 ui e 4 2019/03/23 11:30 欧赔 f 5 2019/03/22 13:00 nan g 6 2019/03/21 13:30 东方 h 7 2019/03/20 14:00 更换 nan 8 2019/03/19 14:30 接口 j 9 2019/03/18 15:00 执行 >>> df.loc['a','a'] 0 >>> df = pd.read_csv('test.csv',index_col=[1,3,4]) >>> df a c b d e a 09:30 请问 0 2019/03/27 b 10:00 二 1 2019/03/26 c 10:30 同意 2 2019/03/25 d 11:00 ui 3 2019/03/24 e 11:30 欧赔 4 2019/03/23 f 13:00 nan 5 2019/03/22 g 13:30 东方 6 2019/03/21 h 14:00 更换 7 2019/03/20 nan 14:30 接口 8 2019/03/19 j 15:00 执行 9 2019/03/18 >>> df.loc['a','a'] __main__:1: performancewarning: indexing past lexsort depth may impact performance. d e 09:30 请问 0 name: a, dtype: int64 >>> df.loc['09:30','a']
usecols 选择读取的列,可传入数字列表或者列名列表,不能混合传。读取结果为传入列表中的列
>>> pd.read_csv('test.csv',usecols=[1,3]) b d 0 a 09:30 1 b 10:00 2 c 10:30 3 d 11:00 4 e 11:30 5 f 13:00 6 g 13:30 7 h 14:00 8 nan 14:30 9 j 15:00 >>> pd.read_csv('test.csv',usecols=['a','c']) a c 0 0 2019/03/27 1 1 2019/03/26 2 2 2019/03/25 3 3 2019/03/24 4 4 2019/03/23 5 5 2019/03/22 6 6 2019/03/21 7 7 2019/03/20 8 8 2019/03/19 9 9 2019/03/18
squeeze 当获取数据只有一列时将它转换为series,默认为fales
>>> df = pd.read_csv('test.csv',usecols=['a']) >>> df a 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 >>> type(df) <class 'pandas.core.frame.dataframe'> >>> df = pd.read_csv('test.csv',usecols=['a'],squeeze=true) >>> df 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 name: a, dtype: int64 >>> type(df) <class 'pandas.core.series.series'>
prefix 当读取的csv文件没有列索引行时,可以为其添加列名
>>> df = pd.read_csv('test.csv',prefix='g',header=none) >>> df g0 g1 g2 g3 g4 0 a b c d e 1 0 a 2019/03/27 09:30 请问 2 1 b 2019/03/26 10:00 二 3 2 c 2019/03/25 10:30 同意 4 3 d 2019/03/24 11:00 ui 5 4 e 2019/03/23 11:30 欧赔 6 5 f 2019/03/22 13:00 nan 7 6 g 2019/03/21 13:30 东方 8 7 h 2019/03/20 14:00 更换 9 8 nan 2019/03/19 14:30 接口 10 9 j 2019/03/18 15:00 执行 >>> df = pd.read_csv('test.csv',prefix=['a','b','c','d','g'],header=none) # 这是个待优化的地方,不能传多个值,他会将多个值变成一个值 >>> df ['a', 'b', 'c', 'd', 'g']0 ['a', 'b', 'c', 'd', 'g']1 ['a', 'b', 'c', 'd', 'g']2 ['a', 'b', 'c', 'd', 'g']3 ['a', 'b', 'c', 'd', 'g']4 0 a b c d e 1 0 a 2019/03/27 09:30 请问 2 1 b 2019/03/26 10:00 二 3 2 c 2019/03/25 10:30 同意 4 3 d 2019/03/24 11:00 ui 5 4 e 2019/03/23 11:30 欧赔 6 5 f 2019/03/22 13:00 nan 7 6 g 2019/03/21 13:30 东方 8 7 h 2019/03/20 14:00 更换 9 8 nan 2019/03/19 14:30 接口 10 9 j 2019/03/18 15:00 执行
mangle_dupe_cols 将重复列重命名,demo:’x’ ,’x.1’,默认为true
>>> df = pd.read_csv('test.csv',mangle_dupe_cols=false) valueerror: setting mangle_dupe_cols=false is not supported yet # 还不支持将它设置为false = =这个目前可以忽略了,考虑到索引重名会影响选择数据等问题,我觉得目前不支持也很正常
dtype 设置列的数据类型,传入字典,键为列名,值为列的类型
>>> import numpy as np >>> pd.read_csv('test.csv')['a'] 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 name: a, dtype: int64 >>> pd = pd.read_csv('test.csv',dtype={'a':np.float64}) a b c d e 0 0.0 a 2019/03/27 09:30 请问 1 1.0 b 2019/03/26 10:00 二 2 2.0 c 2019/03/25 10:30 同意 3 3.0 d 2019/03/24 11:00 ui 4 4.0 e 2019/03/23 11:30 欧赔 5 5.0 f 2019/03/22 13:00 nan 6 6.0 g 2019/03/21 13:30 东方 7 7.0 h 2019/03/20 14:00 更换 8 8.0 nan 2019/03/19 14:30 接口 9 9.0 j 2019/03/18 15:00 执行 >>> pd['a'] 0 0.0 1 1.0 2 2.0 3 3.0 4 4.0 5 5.0 6 6.0 7 7.0 8 8.0 9 9.0 name: a, dtype: float64
engine 选择解释器引擎,可以选’c’、’python’,c解释器速度更快,python解释器功能更多
>>> pd.read_csv('test.csv',engine='c') a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 nan 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 nan 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行 >>> pd.read_csv('test.csv',engine='python') # 直接用python引擎读会乱码因为python3 中的字符串默认为 unicode 编码,这说明默认的解释器引擎应该是c a b c d e 0 0 a 2019/03/27 09:30 璇烽棶 1 1 b 2019/03/26 10:00 浜� 2 2 c 2019/03/25 10:30 鍚屾剰 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 娆ц禂 5 5 f 2019/03/22 13:00 nan 6 6 g 2019/03/21 13:30 涓滄柟 7 7 h 2019/03/20 14:00 鏇存崲 8 8 nan 2019/03/19 14:30 鎺ュ彛 9 9 j 2019/03/18 15:00 鎵ц�� >>> pd.read_csv('test.csv',engine='python',encoding='utf-8') # 加上编码格式 后成功读出中文 a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 nan 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 nan 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行
converters
就跟他的名字一样,他可以把数据转换为另一种数据,不仅限于数据类型,他还可以改变数据,需传入字典,键为列名或者列所在的位置,值传函数名>>> def fun(x): ... x = int(x)1 ... return x ... >>> pd.read_csv('test.csv',converters = {'a':fun}) a b c d e 0 1 a 2019/03/27 09:30 请问 1 2 b 2019/03/26 10:00 二 2 3 c 2019/03/25 10:30 同意 3 4 d 2019/03/24 11:00 ui 4 5 e 2019/03/23 11:30 欧赔 5 6 f 2019/03/22 13:00 nan 6 7 g 2019/03/21 13:30 东方 7 8 h 2019/03/20 14:00 更换 8 9 nan 2019/03/19 14:30 接口 9 10 j 2019/03/18 15:00 执行
true_values 将一列的值认为是true
>>> pd.read_csv('test.csv',true_values=['a']) a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 nan 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 nan 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行 >>> df = pd.read_csv('test.csv',true_values=['a']) # 我目前还没发现这个有啥用,如果有大佬知道,求告诉我一下 >>> df['a'] 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 name: a, dtype: int64
false_values 将一列的值认为是false
>>> df = pd.read_csv('test.csv',false_values=['a']) >>> df['a'] 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 name: a, dtype: int64
skiprows 从顶部开始跳过,然后开始列索引也随之改变,可以传int,和任何可迭代的数据,当传迭代的数据时,在没有0的情况下列索引不会被改变,有0的情况下会将下一个跳过的行作为列索引,如果连续,则为最后一个连续的行作为索引行
>>> df = pd.read_csv('test.csv',skiprows=5) # 只传入一个,所以直接将行索引为5作为索银行开始读取 >>> df 4 e 2019/03/23 11:30 欧赔 0 5 f 2019/03/22 13:00 nan 1 6 g 2019/03/21 13:30 东方 2 7 h 2019/03/20 14:00 更换 3 8 nan 2019/03/19 14:30 接口 4 9 j 2019/03/18 15:00 执行 >>> df.loc[0,'e'] 'f' >>> df = pd.read_csv('test.csv',skiprows=[1,3,4]) # 这里传入多个后,由于没有从第一行开始,所以原来的列索引没有改变 >>> df a b c d e 0 1 b 2019/03/26 10:00 二 1 4 e 2019/03/23 11:30 欧赔 2 5 f 2019/03/22 13:00 nan 3 6 g 2019/03/21 13:30 东方 4 7 h 2019/03/20 14:00 更换 5 8 nan 2019/03/19 14:30 接口 6 9 j 2019/03/18 15:00 执行 >>> df = pd.read_csv('test.csv',skiprows=[0,2,3,4]) # 从第一行开始跳过而且不连续所以列索引就为第一行 >>> df 0 a 2019/03/27 09:30 请问 0 4 e 2019/03/23 11:30 欧赔 1 5 f 2019/03/22 13:00 nan 2 6 g 2019/03/21 13:30 东方 3 7 h 2019/03/20 14:00 更换 4 8 nan 2019/03/19 14:30 接口 5 9 j 2019/03/18 15:00 执行 >>> df = pd.read_csv('test.csv',skiprows=[0,1,2,3,4]) # 从第一行开始且传入连续的,所以会直接跳过前面所有的直接从索引为4的位置开始,即将原来索引为4的行作为列索引 >>> df 4 e 2019/03/23 11:30 欧赔 0 5 f 2019/03/22 13:00 nan 1 6 g 2019/03/21 13:30 东方 2 7 h 2019/03/20 14:00 更换 3 8 nan 2019/03/19 14:30 接口 4 9 j 2019/03/18 15:00 执行
skipfooter 从底部开始跳过,不支持c引擎,默认为0,只能传入单个int
>>> df = pd.read_csv('test.csv',skipfooter=1) # 不指定python引擎就会出警告 __main__:1: parserwarning: falling back to the 'python' engine because the 'c' engine does not support ski pfooter; you can avoid this warning by specifying engine='python'. >>> df = pd.read_csv('test.csv',skipfooter=1,engine='python',encoding='utf-8') # >>> df a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 nan 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 nan 2019/03/19 14:30 接口 >>> df = pd.read_csv('test.csv',skipfooter=5,engine='python',encoding='utf-8') # 这个不支持迭代器,只能传单个数字 >>> df a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔
nrows 读取指定行数,读取顺序为从顶部到底部,必须为int
>>> pd.read_csv('test.csv',nrows=5) a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔
na_values 可以将制定值变为缺失值nan,将多个值放入可迭代对象也可以将多个值都转化为nan,不想看到它,就把它放进去吧,哈哈
>>> pd.read_csv('test.csv',na_values=[0,1,2]) a b c d e 0 nan a 2019/03/27 09:30 请问 1 nan b 2019/03/26 10:00 二 2 nan c 2019/03/25 10:30 同意 3 3.0 d 2019/03/24 11:00 ui 4 4.0 e 2019/03/23 11:30 欧赔 5 5.0 f 2019/03/22 13:00 nan 6 6.0 g 2019/03/21 13:30 东方 7 7.0 h 2019/03/20 14:00 更换 8 8.0 nan 2019/03/19 14:30 接口 9 9.0 j 2019/03/18 15:00 执行
keep_default_na 是否保留默认应该转化为缺失值的列表,默认为true,如果你想显示文档的所有内容可以将其改为false并且不传入任何na_values
>>> pd.read_csv('test.csv',keep_default_na=false) a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行
na_filter 是否不过滤掉所有na,默认为true
>>> pd.read_csv('test.csv',na_filter=false) a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行 >>> pd.read_csv('test.csv',na_filter=false,na_values=[0,1,2]) # 从这里可以看出,na_values的优先级比na_filter高 a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行
verbose 显示标注na的一些参数
tokenization took: 0.00 ms
type conversion took: 0.00 ms
parser memory cleanup took: 0.00 ms>>> pd.read_csv('test.csv',verbose=true) tokenization took: 0.00 ms type conversion took: 0.00 ms parser memory cleanup took: 0.00 ms a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 nan 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 nan 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行
skip_blank_lines 是否跳过空白行,默认为true
>>> pd.read_csv('test.csv',skip_blank_lines=true,keep_default_na=false,na_filter=false) # 这里可以看出skip_blank_lines的优先级比keep_default_na和na_filter的优先级都高 a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行
parse_dates 解析数据为时间格式。
传入boolean格式时,会尝试解析索引;
传入int or column name or list 时,解析指定列;(实际测试中出现这个错误typeerror: only booleans, lists, and dictionaries are accepted for the ‘parse_dates’ parameter,说明目前版本还不支持int and column name)
传入[[]]时会将列表里的解析为一个时间格式;
传入dict时会将字典值里的两列合并为时间格式赋值给键>>> pd.read_csv('test.csv',parse_dates=true)['c'] 0 2019/03/27 1 2019/03/26 2 2019/03/25 3 2019/03/24 4 2019/03/23 5 2019/03/22 6 2019/03/21 7 2019/03/20 8 2019/03/19 9 2019/03/18 name: c, dtype: object >>> pd.read_csv('test.csv',parse_dates=true)['d'] 0 09:30 1 10:00 2 10:30 3 11:00 4 11:30 5 13:00 6 13:30 7 14:00 8 14:30 9 15:00 name: d, dtype: object >>> pd.read_csv('test.csv',parse_dates=[2])['c'] 0 2019-03-27 1 2019-03-26 2 2019-03-25 3 2019-03-24 4 2019-03-23 5 2019-03-22 6 2019-03-21 7 2019-03-20 8 2019-03-19 9 2019-03-18 name: c, dtype: datetime64[ns] >>> pd.read_csv('test.csv',parse_dates=[3])['d'] # 当数据时分时时会在前面加入了当前的日期 0 2019-03-27 09:30:00 1 2019-03-27 10:00:00 2 2019-03-27 10:30:00 3 2019-03-27 11:00:00 4 2019-03-27 11:30:00 5 2019-03-27 13:00:00 6 2019-03-27 13:30:00 7 2019-03-27 14:00:00 8 2019-03-27 14:30:00 9 2019-03-27 15:00:00 name: d, dtype: datetime64[ns] >>> pd.read_csv('test.csv',parse_dates=[2])['c'] # 当数据时日期是会将他的类型改变 0 2019-03-27 1 2019-03-26 2 2019-03-25 3 2019-03-24 4 2019-03-23 5 2019-03-22 6 2019-03-21 7 2019-03-20 8 2019-03-19 9 2019-03-18 name: c, dtype: datetime64[ns] >>> pd.read_csv('test.csv',parse_dates={'时间':[2,3]}) 时间 a b e 0 2019-03-27 09:30:00 0 a 请问 1 2019-03-26 10:00:00 1 b 二 2 2019-03-25 10:30:00 2 c 同意 3 2019-03-24 11:00:00 3 d ui 4 2019-03-23 11:30:00 4 e 欧赔 5 2019-03-22 13:00:00 5 f nan 6 2019-03-21 13:30:00 6 g 东方 7 2019-03-20 14:00:00 7 h 更换 8 2019-03-19 14:30:00 8 nan 接口 9 2019-03-18 15:00:00 9 j 执行 >>> pd.read_csv('test.csv',parse_dates={'时间':[2,3]})['时间'] 0 2019-03-27 09:30:00 1 2019-03-26 10:00:00 2 2019-03-25 10:30:00 3 2019-03-24 11:00:00 4 2019-03-23 11:30:00 5 2019-03-22 13:00:00 6 2019-03-21 13:30:00 7 2019-03-20 14:00:00 8 2019-03-19 14:30:00 9 2019-03-18 15:00:00 name: 时间, dtype: datetime64[ns]
infer_datetime_format 开启datetime解析,如果和parse_dates同时开启速度回快5-10倍,默认为fasle
>>> pd.read_csv('test.csv',parse_dates={'时间':[2,3]},infer_datetime_format=true) # 没感觉快多少啊,可能数据量比较小,看不出来 时间 a b e 0 2019-03-27 09:30:00 0 a 请问 1 2019-03-26 10:00:00 1 b 二 2 2019-03-25 10:30:00 2 c 同意 3 2019-03-24 11:00:00 3 d ui 4 2019-03-23 11:30:00 4 e 欧赔 5 2019-03-22 13:00:00 5 f nan 6 2019-03-21 13:30:00 6 g 东方 7 2019-03-20 14:00:00 7 h 更换 8 2019-03-19 14:30:00 8 nan 接口 9 2019-03-18 15:00:00 9 j 执行
keep_date_col 在parse_dates传入字典时可以保存原始列
>>> pd.read_csv('test.csv',parse_dates={'时间':[2,3]},keep_date_col=true) 时间 a b c d e 0 2019-03-27 09:30:00 0 a 2019/03/27 09:30 请问 1 2019-03-26 10:00:00 1 b 2019/03/26 10:00 二 2 2019-03-25 10:30:00 2 c 2019/03/25 10:30 同意 3 2019-03-24 11:00:00 3 d 2019/03/24 11:00 ui 4 2019-03-23 11:30:00 4 e 2019/03/23 11:30 欧赔 5 2019-03-22 13:00:00 5 f 2019/03/22 13:00 nan 6 2019-03-21 13:30:00 6 g 2019/03/21 13:30 东方 7 2019-03-20 14:00:00 7 h 2019/03/20 14:00 更换 8 2019-03-19 14:30:00 8 nan 2019/03/19 14:30 接口 9 2019-03-18 15:00:00 9 j 2019/03/18 15:00 执行
date_parser 通过特殊函数将字符串转化为datatime格式
>>> def my_date_parser(dt): ... return datetime(int(dt[0:4]), int(dt[5:7]), int(dt[8:10])) ... >>> pd.read_csv('test.csv',date_parser=my_date_parser,parse_dates={'time':[2]}) time a b d e 0 2019-03-27 0 a 09:30 请问 1 2019-03-26 1 b 10:00 二 2 2019-03-25 2 c 10:30 同意 3 2019-03-24 3 d 11:00 ui 4 2019-03-23 4 e 11:30 欧赔 5 2019-03-22 5 f 13:00 nan 6 2019-03-21 6 g 13:30 东方 7 2019-03-20 7 h 14:00 更换 8 2019-03-19 8 nan 14:30 接口 9 2019-03-18 9 j 15:00 执行 >>> pd.read_csv('test.csv',date_parser=my_date_parser,parse_dates={'time':[2]})['time'] 0 2019-03-27 1 2019-03-26 2 2019-03-25 3 2019-03-24 4 2019-03-23 5 2019-03-22 6 2019-03-21 7 2019-03-20 8 2019-03-19 9 2019-03-18 name: time, dtype: datetime64[ns]
dayfirst 是否开启日期解析 默认为否
>>> pd.read_csv('test.csv',dayfirst=true) a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 nan 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 nan 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行 >>> pd.read_csv('test.csv',dayfirst=true)['c'] 0 2019/03/27 1 2019/03/26 2 2019/03/25 3 2019/03/24 4 2019/03/23 5 2019/03/22 6 2019/03/21 7 2019/03/20 8 2019/03/19 9 2019/03/18 name: c, dtype: object >>> pd.read_csv('test.csv',dayfirst=true)['d'] 0 09:30 1 10:00 2 10:30 3 11:00 4 11:30 5 13:00 6 13:30 7 14:00 8 14:30 9 15:00 name: d, dtype: object
iterator 是否将结果转为可迭代对象,还可以通过get_chunk方法获取
>>> pd.read_csv('test.csv',iterator=true) <pandas.io.parsers.textfilereader object at 0x0000017a2836a518> >>> for i in pd.read_csv('test.csv',iterator=true): ... print(i) ... <built-in function print> a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 nan 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 nan 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行 >>> pd.read_csv('test.csv',iterator=true).get_chunk() a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 nan 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 nan 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行
chunksize 将提供的行数变成可迭代对象,同样可以通过get_chunk方法获取
>>> pd.read_csv('test.csv',chunksize=1) <pandas.io.parsers.textfilereader object at 0x00000183f582a1d0> >>> for i in pd.read_csv('test.csv',chunksize=5): # 这里遍历的时候好像是将它切割开 ... print(i) ... a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 a b c d e 5 5 f 2019/03/22 13:00 nan 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 nan 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行 >>> for i in pd.read_csv('test.csv',chunksize=1): ... print(i) ... a b c d e 0 0 a 2019/03/27 09:30 请问 a b c d e 1 1 b 2019/03/26 10:00 二 a b c d e 2 2 c 2019/03/25 10:30 同意 a b c d e 3 3 d 2019/03/24 11:00 ui a b c d e 4 4 e 2019/03/23 11:30 欧赔 a b c d e 5 5 f 2019/03/22 13:00 nan a b c d e 6 6 g 2019/03/21 13:30 东方 a b c d e 7 7 h 2019/03/20 14:00 更换 a b c d e 8 8 nan 2019/03/19 14:30 接口 a b c d e 9 9 j 2019/03/18 15:00 执行 >>> pd.read_csv('test.csv',chunksize=1).get_chunk() a b c d e 0 0 a 2019/03/27 09:30 请问 >>> pd.read_csv('test.csv',chunksize=5).get_chunk() a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔
compression 解压缩,可选{‘infer’, ‘gzip’, ‘bz2’, ‘zip’, ‘xz’, none}, 默认‘infer’
>>> pd.read_csv('test.zip',compression='zip') a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 nan 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 nan 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行
thousands 千位分隔符
>>> df = pd.read_csv('test.csv') # 因为它没有上千的数字 >>> df['a']=df['a']*99999 # 于是我将a列全都×99999 >>> df a b c d e 0 0 a 2019/03/27 09:30 请问 1 99999 b 2019/03/26 10:00 二 2 199998 c 2019/03/25 10:30 同意 3 299997 d 2019/03/24 11:00 ui 4 399996 e 2019/03/23 11:30 欧赔 5 499995 f 2019/03/22 13:00 nan 6 599994 g 2019/03/21 13:30 东方 7 699993 h 2019/03/20 14:00 更换 8 799992 nan 2019/03/19 14:30 接口 9 899991 j 2019/03/18 15:00 执行 >>> df.to_csv('test2.csv') # 将结果存入test2 >>> pd.read_csv('test2.csv') # 读出test2查看是否正确 unnamed: 0 a b c d e 0 0 0 a 2019/03/27 09:30 请问 1 1 99999 b 2019/03/26 10:00 二 2 2 199998 c 2019/03/25 10:30 同意 3 3 299997 d 2019/03/24 11:00 ui 4 4 399996 e 2019/03/23 11:30 欧赔 5 5 499995 f 2019/03/22 13:00 nan 6 6 599994 g 2019/03/21 13:30 东方 7 7 699993 h 2019/03/20 14:00 更换 8 8 799992 nan 2019/03/19 14:30 接口 9 9 899991 j 2019/03/18 15:00 执行 >>> pd.read_csv('test2.csv',thousands='/') # 但是一顿操作猛如虎,结果啥都没变 unnamed: 0 a b c d e 0 0 0 a 20190327 09:30 请问 1 1 99999 b 20190326 10:00 二 2 2 199998 c 20190325 10:30 同意 3 3 299997 d 20190324 11:00 ui 4 4 399996 e 20190323 11:30 欧赔 5 5 499995 f 20190322 13:00 nan 6 6 599994 g 20190321 13:30 东方 7 7 699993 h 20190320 14:00 更换 8 8 799992 nan 20190319 14:30 接口 9 9 899991 j 20190318 15:00 执行
decimal 识别成小数点的字符,默认为‘.’注意,只能穿一个长度的str
>>> pd.read_csv('test.csv',decimal=':') a b c d e 0 0 a 2019/03/27 9.3 请问 1 1 b 2019/03/26 10.0 二 2 2 c 2019/03/25 10.3 同意 3 3 d 2019/03/24 11.0 ui 4 4 e 2019/03/23 11.3 欧赔 5 5 f 2019/03/22 13.0 nan 6 6 g 2019/03/21 13.3 东方 7 7 h 2019/03/20 14.0 更换 8 8 nan 2019/03/19 14.3 接口 9 9 j 2019/03/18 15.0 执行
lineterminator 行结束标识符,会根据传入的str结束行,只对c引擎有效
>>> pd.read_csv('test.csv',lineterminator=',') a 0 b 1 c 2 d 3 e\r\n0 4 a 5 2019/03/27 6 09:30 7 请问\r\n1 8 b 9 2019/03/26 10 10:00 11 二\r\n2 12 c 13 2019/03/25 14 10:30 15 同意\r\n3 16 d 17 2019/03/24 18 11:00 19 ui\r\n4 20 e 21 2019/03/23 22 11:30 23 欧赔\r\n5 24 f 25 2019/03/22 26 13:00 27 \r\n6 28 g 29 2019/03/21 30 13:30 31 东方\r\n7 32 h 33 2019/03/20 34 14:00 35 更换\r\n8 36 2019/03/19 37 14:30 38 接口\r\n9 39 j 40 2019/03/18 41 15:00 42 执行\r\n
quotechar
// todo 引用分隔符quoting
// todo 引用doublequote
// todo 引用啥咧escapechar 将一个长度为1的字符串变为转义字符
>>> pd.read_csv('test.csv',escapechar='/') a b c d e 0 0 a 20190327 09:30 请问 1 1 b 20190326 10:00 二 2 2 c 20190325 10:30 同意 3 3 d 20190324 11:00 ui 4 4 e 20190323 11:30 欧赔 5 5 f 20190322 13:00 nan 6 6 g 20190321 13:30 东方 7 7 h 20190320 14:00 更换 8 8 nan 20190319 14:30 接口 9 9 j 20190318 15:00 执行
comment
//todo 注释相关encoding 编码方式
>>> pd.read_csv('test.csv',engine='python') a b c d e 0 0 a 2019/03/27 09:30 璇烽棶 1 1 b 2019/03/26 10:00 浜� 2 2 c 2019/03/25 10:30 鍚屾剰 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 娆ц禂 5 5 f 2019/03/22 13:00 nan 6 6 g 2019/03/21 13:30 涓滄柟 7 7 h 2019/03/20 14:00 鏇存崲 8 8 nan 2019/03/19 14:30 鎺ュ彛 9 9 j 2019/03/18 15:00 鎵ц�� >>> pd.read_csv('test.csv',engine='python',encoding='utf-8') a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 nan 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 nan 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行
tupleize_cols
>>> pd.read_csv('test.csv',tupleize_cols=true) xxx:885: futurewarning: the'tupleize_cols' argument has been deprecated and will be removed in a future version. column tuples will t hen always be converted to multiindex. self.options, self.engine = self._clean_options(options, engine) a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 nan 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 nan 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行
error_bad_lines 将问题行删除,默认为true
>>> pd.read_csv('test.csv',error_bad_lines=false) a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 nan 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 nan 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行
warn_bad_lines 显示问题行的警告,默认为true
>>> pd.read_csv('test.csv',warn_bad_lines=false) a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 nan 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 nan 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行
delim_whitespace 将换行符换成空格,等效于sep=’\s ’,默认为false
>>> pd.read_csv('test.csv',delim_whitespace =true) a,b,c,d,e 0 0,a,2019/03/27,09:30,请问 1 1,b,2019/03/26,10:00,二 2 2,c,2019/03/25,10:30,同意 3 3,d,2019/03/24,11:00,ui 4 4,e,2019/03/23,11:30,欧赔 5 5,f,2019/03/22,13:00, 6 6,g,2019/03/21,13:30,东方 7 7,h,2019/03/20,14:00,更换 8 8,,2019/03/19,14:30,接口 9 9,j,2019/03/18,15:00,执行
low_memory 减少对df数据类型的选择,降低消耗内存,大白话就是为了减少内存消耗放弃一些数据类型的精度
>>> pd.read_csv('test.csv',low_memory =false) a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 nan 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 nan 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行
memory_map 将文件加载到内存中,提高读取效率
>>> pd.read_csv('test.csv',memory_map =true) a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 nan 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 nan 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行
float_precision 在c引擎在,可以优化浮点数
>>> pd.read_csv('test.csv',float_precision=":") a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 nan 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 nan 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行 >>> pd.read_csv('test.csv',float_precision=".",dtype={'a':np.float64})['a'] # 貌似没啥用啊 0 0.0 1 1.0 2 2.0 3 3.0 4 4.0 5 5.0 6 6.0 7 7.0 8 8.0 9 9.0 name: a, dtype: float64
pd.read_table
deprecated since version 0.24.0. use pandas.read_csv() instead, passing sep=’\t’ if necessary.
also supports optionally iterating or breaking of the file into chunks.
additional help can be found in the online docs for io tools.
这是官方文档里写的一段话,大致意思就是在pandas 0.24.0以后的版本中不推荐使用read_table,你们可以用read_csv()代替,用sep=’\t’设置分隔符,所以read_table,就say 88 啦~- pd.read_excel,读取excel格式文件
- 参数解读
- io 文件路径或者文件对象或者url,跟read_csv中的filepath_or_buffer参数有点类似
>>> pd.read_excel('test.xls') a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 爱思 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 i 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行 >>> pd.read_excel(open('test.xlsx','rb')) a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 爱思 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 i 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行
- sheet_name 表名,可以传int或者str或者list,默认为0,0表示第一个表str直接写表明,list可以传多个表,可以int和str混用
>>> pd.read_excel(open('test.xlsx','rb'),sheet_name='sheet1') a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 爱思 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 i 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行 >>> pd.read_excel(open('test.xlsx','rb'),sheet_name=0) a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 爱思 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 i 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行 >>> pd.read_excel(open('test.xlsx','rb'),sheet_name=[0,'sheet2']) ordereddict([(0, a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 爱思 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 i 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行), ('sheet2', a b c d e 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 爱思 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 i 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行)])
- header 表头开始的位置,不管是int还是header,第一个出现的行作为索引行
>>> pd.read_excel(open('test.xlsx','rb'),header=1) # 从第一行开始,即将第一行变成列索引 0 a 2019/03/27 09:30 请问 0 1 b 2019/03/26 10:00 二 1 2 c 2019/03/25 10:30 同意 2 3 d 2019/03/24 11:00 ui 3 4 e 2019/03/23 11:30 欧赔 4 5 f 2019/03/22 13:00 爱思 5 6 g 2019/03/21 13:30 东方 6 7 h 2019/03/20 14:00 更换 7 8 i 2019/03/19 14:30 接口 8 9 j 2019/03/18 15:00 执行 >>> pd.read_excel(open('test.xlsx','rb'),header=[1,2,3,4]) # 将1,2,3,4行变成表头 0 a 2019/03/27 09:30 请问 1 b 2019/03/26 10:00 二 2 c 2019/03/25 10:30 同意 3 d 2019/03/24 11:00 ui 0 4 e 2019/03/23 11:30 欧赔 1 5 f 2019/03/22 13:00 爱思 2 6 g 2019/03/21 13:30 东方 3 7 h 2019/03/20 14:00 更换 4 8 i 2019/03/19 14:30 接口 5 9 j 2019/03/18 15:00 执行 >>> pd.read_excel(open('test.xlsx','rb'),header=[1,2,3,4])['a'] # 因为是从第一行,所以索引为a' b c d 0 e 1 f 2 g 3 h 4 i 5 j >>> pd.read_excel(open('test.xlsx','rb'),header=[0,1,2,3,4]) # 从第0行开始,即0行是列索引行 a b c d e 0 a 2019/03/27 09:30 请问 1 b 2019/03/26 10:00 二 2 c 2019/03/25 10:30 同意 3 d 2019/03/24 11:00 ui 0 4 e 2019/03/23 11:30 欧赔 1 5 f 2019/03/22 13:00 爱思 2 6 g 2019/03/21 13:30 东方 3 7 h 2019/03/20 14:00 更换 4 8 i 2019/03/19 14:30 接口 5 9 j 2019/03/18 15:00 执行
- names 列名
>>> pd.read_excel(open('test.xlsx','rb'),names=[1,2,3,4,5]) # 当列表跟表中列数匹配时,将列索引名更换为names里的名 1 2 3 4 5 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 爱思 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 i 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行 >>> pd.read_excel(open('test.xlsx','rb'),names=[1,2,3,3,5]) # 当出现重复时,会变成x:x.1 1 2 3 3.1 5 0 0 a 2019/03/27 09:30 请问 1 1 b 2019/03/26 10:00 二 2 2 c 2019/03/25 10:30 同意 3 3 d 2019/03/24 11:00 ui 4 4 e 2019/03/23 11:30 欧赔 5 5 f 2019/03/22 13:00 爱思 6 6 g 2019/03/21 13:30 东方 7 7 h 2019/03/20 14:00 更换 8 8 i 2019/03/19 14:30 接口 9 9 j 2019/03/18 15:00 执行 >>> pd.read_excel(open('test.xlsx','rb'),names=[1,2,3,5]) # 当数量不匹配时会报错 ... valueerror: number of passed names did not match number of header fields in the file
- index_col
>>> pd.read_excel(open('test.xlsx','rb'),index_col=1) a c d e b a 0 2019/03/27 09:30 请问 b 1 2019/03/26 10:00 二 c 2 2019/03/25 10:30 同意 d 3 2019/03/24 11:00 ui e 4 2019/03/23 11:30 欧赔 f 5 2019/03/22 13:00 爱思 g 6 2019/03/21 13:30 东方 h 7 2019/03/20 14:00 更换 i 8 2019/03/19 14:30 接口 j 9 2019/03/18 15:00 执行 >>> pd.read_excel(open('test.xlsx','rb'),index_col='e') a b c d e 请问 0 a 2019/03/27 09:30 二 1 b 2019/03/26 10:00 同意 2 c 2019/03/25 10:30 ui 3 d 2019/03/24 11:00 欧赔 4 e 2019/03/23 11:30 爱思 5 f 2019/03/22 13:00 东方 6 g 2019/03/21 13:30 更换 7 h 2019/03/20 14:00 接口 8 i 2019/03/19 14:30 执行 9 j 2019/03/18 15:00 >>> pd.read_excel(open('test.xlsx','rb'),index_col=['e',0]) typeerror: list indices must be integers or slices, not str >>> pd.read_excel(open('test.xlsx','rb'),index_col=[1,0]) c d e b a a 0 2019/03/27 09:30 请问 b 1 2019/03/26 10:00 二 c 2 2019/03/25 10:30 同意 d 3 2019/03/24 11:00 ui e 4 2019/03/23 11:30 欧赔 f 5 2019/03/22 13:00 爱思 g 6 2019/03/21 13:30 东方 h 7 2019/03/20 14:00 更换 i 8 2019/03/19 14:30 接口 j 9 2019/03/18 15:00 执行 >>> pd.read_excel(open('test.xlsx','rb'),index_col=[1,0]).loc['a','c'] a 0 2019/03/27 name: c, dtype: object
- parse_cols 给列起别名
deprecated since version 0.21.0: use usecols instead. - usecols
deprecated since version 0.24.0: pass in a list of int instead from 0 to usecols inclusive.
- io 文件路径或者文件对象或者url,跟read_csv中的filepath_or_buffer参数有点类似
- 参数解读
- pd.read_sql,读取sql格式文件
- pd.read_json,读取json格式文件
- pd.read_html,读取html格式文件
- pd.read_clipbard,读取剪切板数据
导出:
- df.to_csv,
- df.to_excel,
- df.tp_sql,
- df.to_json,