Pandas
Pandas
参考资料
https://www.jianshu.com/p/a77b0bc736f2;
http://pandas.pydata.org/pandas-docs/stable/reference/index.html;
https://www.jianshu.com/p/161364dd0acf
注意:以下所有代码在没有创建新的Series或DataFrame的情况下都沿用之前那个
安装
- 通过安装Anaconda安装Pandas,一般情况下,安装Anaconda是自带Pandas的,有的人会选择安装精简版的Anaconda,可能会没有Pandas,可以在命令行输入conda install pands
- 通过pip安装Anaconda,在命令行输入pip install pandas,在安装Pandas时,会帮你安装时NumPy等一些其他的包
数据结构
Series
简介
可以理解为是建立在Numpy中array的基础上增加索引的一维数组。
使用
- 创建Series,创建Series时可以传入两个参数data和index,和NumPy一样data可以传列表、元祖,index也是如此,当传入字典的时候,它的键会作为index,值作为data,还可以传array
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
>>> import pandas as pd >>> import numpy as np >>> pd.Series([1,2,3,4],["a","b","c","d"]) a 1 b 2 c 3 d 4 >>> pd.Series((1,2,3,4),("a","b","c","d")) a 1 b 2 c 3 d 4 dtype: int64 >>> pd.Series({"a":1,"b":2,"c":3,"d":4}) a 1 b 2 c 3 d 4 dtype: int64 >>> pd.Series(np.arange(4)) 0 0 1 1 2 2 3 3 dtype: int32
- 选择数据,在选择数据的时候,Series可以直接根据索引来选择,他也可以进行切片和遍历的操作
1 2 3 4 5 6 7 8 9 10 11 12 13
>>> s1[0] 0 >>> for i in s1: ... print(i) ... 0 1 2 3 >>> s1[1:3] 1 1 2 2 dtype: int32
- Series还可以根据条件选择数据
1 2 3 4 5
>>> s1[s1>0] 1 1 2 2 3 3 dtype: int32
- Series还可以根据条件选择数据
- Series简单的数学运算,Series跟NumPy里的array一样,也可以进行四则运算,不仅可以和数,也可以和Series对象进行,在和Series对象进行运算的时候,根据索引来操作,假如有存在空的时候会出现NaN
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
>>> s1 = pd.Series(np.arange(4)) >>> s1+5 0 5 1 6 2 7 3 8 dtype: int32 >>> s1-3 0 -3 1 -2 2 -1 3 0 dtype: int32 >>> s1*2 0 0 1 2 2 4 3 6 dtype: int32 >>> s1/6 0 0.000000 1 0.166667 2 0.333333 3 0.500000 dtype: float64 >>> s2 = pd.Series(np.random.random(3)) >>> s2 0 0.038811 1 0.860956 2 0.751210 dtype: float64 >>> s1+s2 0 0.038811 1 1.860956 2 2.751210 3 NaN dtype: float64 >>> s1-s2 0 -0.038811 1 0.139044 2 1.248790 3 NaN dtype: float64 >>> s1*s2 0 0.000000 1 0.860956 2 1.502420 3 NaN dtype: float64 >>> s1/s2 0 0.000000 1 1.161500 2 2.662372 3 NaN dtype: float64
在进行不同精度的四则运算时,Pandas会让结果的精度和两个Series中精度更精确的那个一样
- 同样也可以使用add/sub等这样的方法进行操作
1 2 3 4 5 6 7 8 9 10 11 12
>>> s1.add(s2) 0 0.038811 1 1.860956 2 2.751210 3 NaN dtype: float64 >>> s1.sub(s2) 0 -0.038811 1 0.139044 2 1.248790 3 NaN dtype: float64
- 同样也可以使用add/sub等这样的方法进行操作
DataFrames
简介
他是一种类似于NumPy中的二维数组,是一种表结构的数据。跟NumPy中的array不同的是DataFrames里的每一列每一行的数据都可以是任意数据类型。
使用
-
创建DataFrame,创建DataFrame时必须要传入一个数据data,和NumPy一样data可以传列表、元祖,当传嵌套字典时,pandas就会把外层字典的键作为列,内层键则作为行索引;在Dataframe中index成为单独的一列,即索引列,同样也可以传入列表和元祖;创建DataFrame时还可以设置columns,他必须传列表
1 2 3 4 5 6 7 8 9 10 11 12
>>> pd.DataFrame((1,2,3,4),index=(1,2,3,4),columns=['a']) a 1 1 2 2 3 3 4 4 >>> a = {'a':{1:1},'b':{2:2}} >>> pd.DataFrame(a) a b 1 1.0 NaN 2 NaN 2.0
在创建DataFrame时,如果传入数据的数据量不匹配,在结果中会产生缺失值,如果传入了columns,结果会按columns传入的顺序显示
-
一些常见的方法
- head,默认获取前五行数据,可以传入想获取的行数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
>>> df = pd.DataFrame({'animal':['alligator', 'bee', 'falcon', 'lion', ... 'monkey', 'parrot', 'shark', 'whale', 'zebra']}) >>> df animal 0 alligator 1 bee 2 falcon 3 lion 4 monkey 5 parrot 6 shark 7 whale 8 zebra >>> df.head() animal 0 alligator 1 bee 2 falcon 3 lion 4 monkey >>> df.head() animal 0 alligator 1 bee 2 falcon 3 lion 4 monkey
- tail,默认获取后五行数据,可以传入想获取的行数
1 2 3 4 5 6 7 8 9 10 11 12
>>> df.tail() animal 4 monkey 5 parrot 6 shark 7 whale 8 zebra >>> df.tail(3) animal 6 shark 7 whale 8 zebra
- shape,查看DataFrame的行列个数
1 2
>>> df.shape (9, 1)
- info,查看索引、数据类型和内存信息
1 2 3 4 5 6 7
>>> df.info() <class 'pandas.core.frame.DataFrame'> RangeIndex: 9 entries, 0 to 8 Data columns (total 1 columns): animal 9 non-null object dtypes: object(1) memory usage: 152.0+ bytes
- mean,所有列的平均数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
>>> df = pd.DataFrame(np.random.rand(5,5)) >>> df 0 1 2 3 4 0 0.987926 0.556055 0.774863 0.926501 0.029973 1 0.635812 0.698311 0.402425 0.727675 0.048129 2 0.001094 0.329329 0.364231 0.754038 0.405464 3 0.975270 0.388988 0.598047 0.355597 0.189753 4 0.171976 0.334893 0.931219 0.967504 0.323952 >>> df.mean() 0 0.554416 1 0.461516 2 0.614157 3 0.746263 4 0.199454 dtype: float64
- count,每一列中非空值的个数
1 2 3 4 5 6 7
>>> df.count() 0 5 1 5 2 5 3 5 4 5 dtype: int64
- max,每一列的最大值
1 2 3 4 5 6 7
>>> df.max() 0 0.987926 1 0.698311 2 0.931219 3 0.967504 4 0.405464 dtype: float64
- min,每一列的最小值
1 2 3 4 5 6 7
>>> df.min() 0 0.001094 1 0.329329 2 0.364231 3 0.355597 4 0.029973 dtype: float64
- median,每一列的中位数
1 2 3 4 5 6 7
>>> df.median() 0 0.635812 1 0.388988 2 0.598047 3 0.754038 4 0.189753 dtype: float64
- std,每一列的标准差
1 2 3 4 5 6 7
>>> df.std() 0 0.453900 1 0.161072 2 0.241820 3 0.242105 4 0.165573 dtype: float64
- corr,列与列之间的相关系数
1 2 3 4 5 6 7
>>> df.corr() 0 1 2 3 4 0 1.000000 0.517374 0.142778 -0.401999 -0.836540 1 0.517374 1.000000 -0.262423 0.076483 -0.882558 2 0.142778 -0.262423 1.000000 0.458608 -0.044045 3 -0.401999 0.076483 0.458608 1.000000 0.032442 4 -0.836540 -0.882558 -0.044045 0.032442 1.000000
- head,默认获取前五行数据,可以传入想获取的行数
-
获取数据
- 切片操作可以运用在一下所有的方法里
- df[columns],获取列,返回列,数据类型为Series
1 2 3 4 5 6 7 8 9 10 11
>>> df = pd.DataFrame([[1, 2], [4, 5], [7, 8]],index=['cobra', 'viper', 'sidewinder'],columns=['max_speed', 'shield']) >>> df max_speed shield cobra 1 2 viper 4 5 sidewinder 7 8 >>> df['max_speed'] cobra 1 viper 4 sidewinder 7 Name: max_speed, dtype: int64
- df[columns1,columns2],返回多列,数据类型为DataFrame
1 2 3 4 5
>>> df[['max_speed','shield']] max_speed shield cobra 1 2 viper 4 5 sidewinder 7 8
- df.loc[0,0],通过对应行列的索引名称来获取,当填入行列时返回单个元素,当只填行或者列的时候返回一个行或者列的Series
1 2 3 4 5 6 7 8 9 10 11 12 13
>>> df.loc["cobra","max_speed"] 1 >>> df.loc["cobra":,"max_speed":] max_speed shield cobra 1 2 viper 4 5 sidewinder 7 8 >>> df.loc["cobra":,] max_speed shield cobra 1 2 viper 4 5 sidewinder 7 8
- df.iloc[0,0],通过位置来获取,当填入行列时返回单个元素,当只填行或者列的时候返回一个行或者列的Series
1 2 3 4 5 6 7 8 9 10 11 12 13
>>> df.iloc[0,0] 1 >>> df.iloc[0:,0:] max_speed shield cobra 1 2 viper 4 5 sidewinder 7 8 >>> df.iloc[0:,] max_speed shield cobra 1 2 viper 4 5 sidewinder 7 8 >>> df.loc["cobra":,]
- df.ix[0,0],结合了loc与iloc,既可以通过位置,又可以通过索引名。当只填行或者列的时候返回一个行或者列的Series
1 2 3 4 5 6
>>> df.ix['viper',1:2] shield 5 Name: viper, dtype: int64 >>> df.ix['viper',0:1] max_speed 4 Name: viper, dtype: int64
- df.values[:,:],通过位置返回所有的数据,当只填行或者列的时候返回一个行或者列的array
1 2 3 4 5 6 7
>>> df.values[0:,:] array([[1, 2], [4, 5], [7, 8]], dtype=int64) >>> df.values[:1,:] array([[1, 2]], dtype=int64) >>>
- df[df[columns]>10],根据条件选出符合条件的列
1 2 3 4 5
>>> df[df['max_speed']>0] max_speed shield cobra 1 2 viper 4 5 sidewinder 7 8
- df.sort_values([columns1,columns2],ascending=[False,True]),按照某列的升降序排列,当填入两个以上的列时,按照先后顺序升降序排列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
>>> df.sort_values('max_speed') max_speed shield cobra 1 2 viper 4 5 sidewinder 7 8 >>> df.sort_values('max_speed',ascending=False) max_speed shield sidewinder 7 8 viper 4 5 cobra 1 2 >>> df.sort_values(['max_speed','shield'],ascending=False) max_speed shield sidewinder 7 8 viper 4 5 cobra 1 2
- df.groupby([columns1,columns2]),按一列或者多列进行分组,返回分组对象
1 2 3 4 5 6 7 8
>>> df.groupby('max_speed') <pandas.core.groupby.generic.DataFrameGroupBy object at 0x000001DF64584588> >>> df.groupby('max_speed').mean() shield max_speed 1 2 4 5 7 8
-
数据清洗
- df.columns = [‘a’,‘b’,‘c’,’d’],重新给列命名
1 2 3 4 5 6
>>> df.columns=['a','b'] >>> df a b cobra 1 2 viper 4 5 sidewinder 7 8
- df.rename(data,axis),改变行索引或者列索引,axis里选择行列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
>>> df.rename(index=str,columns={'a':'A','b':'B'}) A B cobra 1 2 viper 4 5 sidewinder 7 8 >>> df.rename(str.lower,axis='columns') a b cobra 1 2 viper 4 5 sidewinder 7 8 >>> df.rename({'cobra':'A','viper':'B','sidewinder':'C'},axis='index') a b A 1 2 B 4 5 C 7 8
- df.set_index(‘column_one’):设置索引列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
>>> df = pd.DataFrame({'month': [1, 4, 7, 10], ... 'year': [2012, 2014, 2013, 2014], ... 'sale': [55, 40, 84, 31]}) >>> df month year sale 0 1 2012 55 1 4 2014 40 2 7 2013 84 3 10 2014 31 >>> df.set_index('month') year sale month 1 2012 55 4 2014 40 7 2013 84 10 2014 31
- df.reset_index,重新设置行索引
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
>>> df = pd.DataFrame([('bird', 389.0), ... ('bird', 24.0), ... ('mammal', 80.5), ... ('mammal', np.nan)], ... index=['falcon', 'parrot', 'lion', 'monkey'], ... columns=('class', 'max_speed')) >>> df class max_speed falcon bird 389.0 parrot bird 24.0 lion mammal 80.5 monkey mammal NaN >>> df.reset_index() index class max_speed 0 falcon bird 389.0 1 parrot bird 24.0 2 lion mammal 80.5 3 monkey mammal NaN
- df.isnull,判断DataFrame中有没有空值,有空值返回True,没有返回False
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
>>> df = pd.DataFrame({'age': [5, 6, np.NaN], ... 'born': [pd.NaT, pd.Timestamp('1939-05-27'), ... pd.Timestamp('1940-04-25')], ... 'name': ['Alfred', 'Batman', ''], ... 'toy': [None, 'Batmobile', 'Joker']}) >>> df age born name toy 0 5.0 NaT Alfred None 1 6.0 1939-05-27 Batman Batmobile 2 NaN 1940-04-25 Joker >>> df.isnull() age born name toy 0 False True False True 1 False False False False 2 True False False False >>> df.isna() age born name toy 0 False True False True 1 False False False False 2 True False False False
- df.notnull,判断DataFrame中有没有非空值,有非空值返回True,没有返回False
1 2 3 4 5
>>> df.notna() age born name toy 0 True False True False 1 True True True True 2 False True True True
- df.dropna(axis),删除所有包含空值的行或者列,axis=0为行,axis=1为列
1 2 3 4 5 6 7 8
>>> df.dropna() age born name toy 1 6.0 1939-05-27 Batman Batmobile >>> df age born name toy 0 5.0 NaT Alfred None 1 6.0 1939-05-27 Batman Batmobile 2 NaN 1940-04-25 Joker
- df.fillna(n),用n来替换DataFrame中的所有空值
1 2 3 4 5
>>> df.fillna('hahaha') age born name toy 0 5 hahaha Alfred hahaha 1 6 1939-05-27 00:00:00 Batman Batmobile 2 hahaha 1940-04-25 00:00:00 Joker
- df.replace(‘a’,‘b’),用’b’来替换DataFrme中所有的’a’
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
>>> df = pd.DataFrame({'A': [0, 1, 2, 3, 4], ... 'B': [5, 6, 7, 8, 9], ... 'C': ['a', 'b', 'c', 'd', 'e']}) >>> df.replace(0, 5) A B C 0 5 5 a 1 1 6 b 2 2 7 c 3 3 8 d 4 4 9 e >>> df.replace(0,5) A B C 0 5 5 a 1 1 6 b 2 2 7 c 3 3 8 d 4 4 9 e
- df[[‘a’,‘b’]].astype(type),改变DataFrme中某几列的数据类型,即改变Series的数据类型
1 2 3 4 5 6 7
>>> df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]}) >>> df.rename(index=str, columns={"A": "a", "B": "c"}) a c 0 1 4 1 2 5 2 3 6 df = pd.DataFrame([('bird', 389.0),('bird', 24.0),('mammal', 80.5),('mammal', np.nan)],index=['falcon', 'parrot', 'lion', 'monkey'],columns=('class', 'max_speed'))
- df.columns = [‘a’,‘b’,‘c’,’d’],重新给列命名
-
数据合并
- df.append(df2),将df2中的数据根据列追加到df中的末尾,注意如果两个df的列名不相同,会显示所有列,在没有的列添加NaN
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
>>> df = pd.DataFrame([[1, 2], [3, 4]], columns=list('AB')) >>> df A B 0 1 2 1 3 4 >>> df2 = pd.DataFrame([[5, 6], [7, 8]], columns=list('AB')) >>> df2 A B 0 5 6 1 7 8 >>> df.append(df2) A B 0 1 2 1 3 4 0 5 6 1 7 8 >>> df3 = pd.DataFrame([[5, 6], [7, 8]], columns=list('BC')) >>> df3 B C 0 5 6 1 7 8 >>> df.append(df3,sort=True) # sort设置排序规则 A B C 0 1.0 2 NaN 1 3.0 4 NaN 0 NaN 5 6.0 1 NaN 7 8.0 >>> df.append(df3,sort=True,ignore_index=True) # ignore_index重新设置索引 A B C 0 1.0 2 NaN 1 3.0 4 NaN 2 NaN 5 6.0 3 NaN 7 8.0
- pd.concat([df1,df2],axis=1),将df2中的数据根据axis选择行列追加到df1的尾部
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
>>> df1 = pd.DataFrame([['a', 1], ['b', 2]],columns=['letter', 'number']) >>> df1 letter number 0 a 1 1 b 2 >>> df2 = pd.DataFrame([['c', 3], ['d', 4]],columns=['letter', 'number']) >>> df2 letter number 0 c 3 1 d 4 >>> pd.concat([df1,df2]) letter number 0 a 1 1 b 2 0 c 3 1 d 4 >>> pd.concat([df1,df2],axis=1) letter number letter number 0 a 1 c 3 1 b 2 d 4
- df1.join(df2,on=columns,how='out’)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
>>> df = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3', 'K4', 'K5'],'A': ['A0', 'A1', 'A2', 'A3', 'A4', 'A5']}) >>> df key A 0 K0 A0 1 K1 A1 2 K2 A2 3 K3 A3 4 K4 A4 5 K5 A5 >>> df2 = pd.DataFrame({'key': ['K0', 'K1', 'K2'],'B': ['B0', 'B1', 'B2']}) >>> df2 key B 0 K0 B0 1 K1 B1 2 K2 B2 >>> df.join(df2,lsuffix='_caller',rsuffix='_other') # lsuffix设置df左侧的重叠列中使用的列名,同理rsuffix为右侧 key_caller A key_other B 0 K0 A0 K0 B0 1 K1 A1 K1 B1 2 K2 A2 K2 B2 3 K3 A3 NaN NaN 4 K4 A4 NaN NaN 5 K5 A5 NaN NaN
- df1.merge(df2,left_on='column1’,right_on='column2’)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
>>> df1 = pd.DataFrame({'lkey': ['foo', 'bar', 'baz', 'foo'], 'value': [1, 2, 3, 5]}) >>> df1 lkey value 0 foo 1 1 bar 2 2 baz 3 3 foo 5 >>> df2 = pd.DataFrame({'rkey': ['foo', 'bar', 'baz', 'foo'], 'value': [5, 6, 7, 8]}) >>> df2 rkey value 0 foo 5 1 bar 6 2 baz 7 3 foo 8 >>> df1.merge(df2,left_on='lkey',right_on='rkey') lkey value_x rkey value_y 0 foo 1 foo 5 1 foo 1 foo 8 2 foo 5 foo 5 3 foo 5 foo 8 4 bar 2 bar 6 5 baz 3 baz 7
- df.append(df2),将df2中的数据根据列追加到df中的末尾,注意如果两个df的列名不相同,会显示所有列,在没有的列添加NaN
-
IO操作
- 导入:
- pd.read_csv,读取csv格式文件
- 参数解读
-
filepath_or_buffer 可以传入文件路径、URL和文件对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
>>> 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 分隔符,默认为‘,’,可以传入正则表达式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
>>> 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一起使用的时候可以跳过注释和空行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
>>> 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
1 2 3 4 5 6 7 8 9 10 11 12
>>> 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。此列表中的重复将导致发出用户警告。可以传入类数组
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
>>> 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,对应位置的列作为索引列,在传入多个的时候,第一列为索引列,在获取元素的时候会出现警告
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
>>> 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 选择读取的列,可传入数字列表或者列名列表,不能混合传。读取结果为传入列表中的列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
>>> 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
>>> 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文件没有列索引行时,可以为其添加列名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
>>> 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
1 2
>>> df = pd.read_csv('test.csv',mangle_dupe_cols=False) ValueError: Setting mangle_dupe_cols=False is not supported yet # 还不支持将它设置为False = =这个目前可以忽略了,考虑到索引重名会影响选择数据等问题,我觉得目前不支持也很正常
-
dtype 设置列的数据类型,传入字典,键为列名,值为列的类型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
>>> 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解释器功能更多
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
>>> 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 就跟他的名字一样,他可以把数据转换为另一种数据,不仅限于数据类型,他还可以改变数据,需传入字典,键为列名或者列所在的位置,值传函数名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
>>> 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
>>> 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
1 2 3 4 5 6 7 8 9 10 11 12 13
>>> 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的情况下会将下一个跳过的行作为列索引,如果连续,则为最后一个连续的行作为索引行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
>>> 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
>>> 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
1 2 3 4 5 6 7
>>> 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,不想看到它,就把它放进去吧,哈哈
1 2 3 4 5 6 7 8 9 10 11 12
>>> 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
1 2 3 4 5 6 7 8 9 10 11 12
>>> 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
>>> 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 ms1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
>>> 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
1 2 3 4 5 6 7 8 9 10 11 12
>>> 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时会将字典值里的两列合并为时间格式赋值给键1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
>>> 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
1 2 3 4 5 6 7 8 9 10 11 12
>>> 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传入字典时可以保存原始列
1 2 3 4 5 6 7 8 9 10 11 12
>>> 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格式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
>>> 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 是否开启日期解析 默认为否
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
>>> 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方法获取
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
>>> 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方法获取
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
>>> 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’
1 2 3 4 5 6 7 8 9 10 11 12
>>> 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 千位分隔符
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
>>> 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
1 2 3 4 5 6 7 8 9 10 11 12
>>> 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引擎有效
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
>>> 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的字符串变为转义字符
1 2 3 4 5 6 7 8 9 10 11 12
>>> 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 编码方式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
>>> 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 执行
-
dialect
1
-
tupleize_cols
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
>>> 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
1 2 3 4 5 6 7 8 9 10 11 12
>>> 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
1 2 3 4 5 6 7 8 9 10 11 12
>>> 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
1 2 3 4 5 6 7 8 9 10 11 12
>>> 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数据类型的选择,降低消耗内存,大白话就是为了减少内存消耗放弃一些数据类型的精度
1 2 3 4 5 6 7 8 9 10 11 12
>>> 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 将文件加载到内存中,提高读取效率
1 2 3 4 5 6 7 8 9 10 11 12
>>> 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引擎在,可以优化浮点数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
>>> 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参数有点类似
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
>>> 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混用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
>>> 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,第一个出现的行作为索引行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
>>> 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 列名
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
>>> 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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
>>> 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,读取剪切板数据
- pd.read_csv,读取csv格式文件
- 导出:
- df.to_csv,
- df.to_excel,
- df.tp_sql,
- df.to_json,
- 导入: