DataFrames常见方法(二)
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,