利用python进行数据分析——pandas
2016-12-11 15:11
911 查看
半年前熟悉的pandas感觉再不整理就忘光光了~
主要是参考一个官方10分钟pandas入门文档,感觉很实用,原文戳这里。
常用的几大工具引入:
创建对象
list创建Series
numpy创建DF
字典创建DF
导入文件创建导出
查看数据
查看各列数据类型
ipython属性查询
单独查看索引名列名所有数据
快速汇总
常用操作
数据转置
排序
获取一行或一列
标签选择
设置条件筛选数据
增加修改DF
缺失值处理
字符串操作
画图
4000
,时间索引以及列标签来创建一个DataFrame:
常用CSV格式,想要其他格式直接替换格式名就好啦~
按值进行排序
通过[]进行选择,这将会对行进行切片
标签切片
使用标签来获取一行
获取一个标量
使用where操作来选择数据:
使用isin()方法来过滤:
修改某个位置的数据,两种方式等价,但处理的数据位置不同哦~:
通过一个numpy数组设置一组新值:
上述操作结果如下:
缺失值的填充:
去掉包含缺失值的行:
reindex()方法可以对指定轴上的索引进行改变/增加/删除操作,这将返回原始数据的一个拷贝:
对数据进行布尔填充:
主要是参考一个官方10分钟pandas入门文档,感觉很实用,原文戳这里。
常用的几大工具引入:
In [1]: import pandas as pd In [2]: import numpy as np In [3]: import matplotlib.pyplot as plt
创建对象
list创建Series
numpy创建DF
字典创建DF
导入文件创建导出
查看数据
查看各列数据类型
ipython属性查询
单独查看索引名列名所有数据
快速汇总
常用操作
数据转置
排序
获取一行或一列
标签选择
设置条件筛选数据
增加修改DF
缺失值处理
字符串操作
画图
创建对象
list创建Series
可以通过传递一个list对象来创建一个Series,pandas会默认创建整型索引:In [4]: s = pd.Series([1,3,5,np.nan,6,8])#[]里放list In [5]: s Out[5]: 0 1.0 1 3.0 2 5.0 3 NaN 4 6.0 5 8.0 dtype: float64
numpy创建DF
通过传递一个numpy array4000
,时间索引以及列标签来创建一个DataFrame:
In [6]: dates = pd.date_range('20130101', periods=6)//data_range In [7]: dates Out[7]: DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06'], dtype='datetime64[ns]', freq='D') In [8]: df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD')) In [9]: df Out[9]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 2013-01-06 -0.673690 0.113648 -1.478427 0.524988
字典创建DF
通过传递一个能够被转换成类似序列结构的字典对象来创建一个DataFrame:In [10]: df2 = pd.DataFrame({ 'A' : 1., ....: 'B' : pd.Timestamp('20130102'), ....: 'C' : pd.Series(1,index=list(range(4)),dtype='float32'), ....: 'D' : np.array([3] * 4,dtype='int32'), ....: 'E' : pd.Categorical(["test","train","test","train"]), ....: 'F' : 'foo' }) ....: In [11]: df2 Out[11]: A B C D E F 0 1.0 2013-01-02 1.0 3 test foo 1 1.0 2013-01-02 1.0 3 train foo 2 1.0 2013-01-02 1.0 3 test foo 3 1.0 2013-01-02 1.0 3 train foo
导入文件创建(导出)
顺便说一句导出文件:常用CSV格式,想要其他格式直接替换格式名就好啦~
In [141]: df.to_csv('foo.csv')
In [142]: data = pd.read_csv('foo.csv')#''中加绝对路径比较靠谱 In [143]: df3 = DataFrame(data) In [144]: df3 Out[144]: Unnamed: 0 A B C D 0 2000-01-01 0.266457 -0.399641 -0.219582 1.186860 1 2000-01-02 -1.170732 -0.345873 1.653061 -0.282953 2 2000-01-03 -1.734933 0.530468 2.060811 -0.515536 3 2000-01-04 -1.555121 1.452620 0.239859 -1.156896 4 2000-01-05 0.578117 0.511371 0.103552 -2.428202 5 2000-01-06 0.478344 0.449933 -0.741620 -1.962409 6 2000-01-07 1.235339 -0.091757 -1.543861 -1.084753 .. ... ... ... ... ... 993 2002-09-20 -10.628548 -9.153563 -7.883146 28.313940 994 2002-09-21 -10.390377 -8.727491 -6.399645 30.914107 995 2002-09-22 -8.985362 -8.485624 -4.669462 31.367740 996 2002-09-23 -9.558560 -8.781216 -4.499815 30.518439 997 2002-09-24 -9.902058 -9.340490 -4.386639 30.105593 998 2002-09-25 -10.216020 -9.480682 -3.933802 29.758560 999 2002-09-26 -11.856774 -10.671012 -3.216025 29.369368 [1000 rows x 5 columns]
查看数据
查看各列数据类型
In [12]: df2.dtypes Out[12]: A float64 B datetime64[ns] C float32 D int32 E category F object dtype: object
ipython属性查询
如果你使用的是IPython,使用Tab自动补全功能会自动识别所有的属性以及自定义的列,下图中是所有能够被自动识别的属性的一个子集:In [13]: df2.<TAB> df2.A df2.boxplot df2.abs df2.C df2.add df2.clip df2.add_prefix df2.clip_lower df2.add_suffix df2.clip_upper df2.align df2.columns df2.all df2.combine df2.any df2.combineAdd df2.append df2.combine_first df2.apply df2.combineMult df2.applymap df2.compound df2.as_blocks df2.consolidate df2.asfreq df2.convert_objects df2.as_matrix df2.copy df2.astype df2.corr df2.at df2.corrwith df2.at_time df2.count df2.axes df2.cov df2.B df2.cummax df2.between_time df2.cummin df2.bfill df2.cumprod df2.blocks df2.cumsum df2.bool df2.D
单独查看索引名,列名,所有数据
In [16]: df.index Out[16]: DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04', '2013-01-05', '2013-01-06'], dtype='datetime64[ns]', freq='D') In [17]: df.columns Out[17]: Index([u'A', u'B', u'C', u'D'], dtype='object') In [18]: df.values Out[18]: array([[ 0.4691, -0.2829, -1.5091, -1.1356], [ 1.2121, -0.1732, 0.1192, -1.0442], [-0.8618, -2.1046, -0.4949, 1.0718], [ 0.7216, -0.7068, -1.0396, 0.2719], [-0.425 , 0.567 , 0.2762, -1.0874], [-0.6737, 0.1136, -1.4784, 0.525 ]])
快速汇总
describe()函数对于数据的快速统计汇总:In [19]: df.describe() Out[19]: A B C D count 6.000000 6.000000 6.000000 6.000000 #数据量 mean 0.073711 -0.431125 -0.687758 -0.233103 #均值 std 0.843157 0.922818 0.779887 0.973118 min -0.861849 -2.104569 -1.509059 -1.135632 25% -0.611510 -0.600794 -1.368714 -1.076610 50% 0.022070 -0.228039 -0.767252 -0.386188 75% 0.658444 0.041933 -0.034326 0.461706 max 1.212112 0.567020 0.276232 1.071804
常用操作
数据转置
In [20]: df.T Out[20]: 2013-01-01 2013-01-02 2013-01-03 2013-01-04 2013-01-05 2013-01-06 A 0.469112 1.212112 -0.861849 0.721555 -0.424972 -0.673690 B -0.282863 -0.173215 -2.104569 -0.706771 0.567020 0.113648 C -1.509059 0.119209 -0.494929 -1.039575 0.276232 -1.478427 D -1.135632 -1.044236 1.071804 0.271860 -1.087401 0.524988
排序
按轴进行排序In [21]: df.sort_index(axis=1, ascending=False) Out[21]: D C B A 2013-01-01 -1.135632 -1.509059 -0.282863 0.469112 2013-01-02 -1.044236 0.119209 -0.173215 1.212112 2013-01-03 1.071804 -0.494929 -2.104569 -0.861849 2013-01-04 0.271860 -1.039575 -0.706771 0.721555 2013-01-05 -1.087401 0.276232 0.567020 -0.424972 2013-01-06 0.524988 -1.478427 0.113648 -0.673690
按值进行排序
In [22]: df.sort_values(by='B') #默认升序,按照B列值大小 Out[22]: A B C D 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-06 -0.673690 0.113648 -1.478427 0.524988 2013-01-05 -0.424972 0.567020 0.276232 -1.087401
获取一行或一列
In [23]: df['A'] #[]中为列名,等同于df.A Out[23]: 2013-01-01 0.469112 2013-01-02 1.212112 2013-01-03 -0.861849 2013-01-04 0.721555 2013-01-05 -0.424972 2013-01-06 -0.673690 Freq: D, Name: A, dtype: float64
通过[]进行选择,这将会对行进行切片
In [24]: df[0:3] #[]中为切片范围 Out[24]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 In [25]: df['20130102':'20130104'] Out[25]: A B C D 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 2013-01-04 0.721555 -0.706771 -1.039575 0.271860
标签选择
通过标签来在多个轴上进行选择In [27]: df.loc[:,['A','B']] Out[27]: A B 2013-01-01 0.469112 -0.282863 2013-01-02 1.212112 -0.173215 2013-01-03 -0.861849 -2.104569 2013-01-04 0.721555 -0.706771 2013-01-05 -0.424972 0.567020 2013-01-06 -0.673690 0.113648
标签切片
In [28]: df.loc['20130102':'20130104',['A','B']] #在数据范围内均可 Out[28]: A B 2013-01-02 1.212112 -0.173215 2013-01-03 -0.861849 -2.104569 2013-01-04 0.721555 -0.706771
使用标签来获取一行
In [26]: df.loc[dates[0]] #等同于df.loc['20130101'] Out[26]: A 0.469112 B -0.282863 C -1.509059 D -1.135632 Name: 2013-01-01 00:00:00, dtype: float64
获取一个标量
In [30]: df.loc[dates[0],'A'] #等价于df.at[dates[0],'A'] Out[30]: 0.46911229990718628
设置条件筛选数据
使用一个单独列的值来选择数据:In [39]: df[df.A > 0] Out[39]: A B C D 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 2013-01-04 0.721555 -0.706771 -1.039575 0.271860
使用where操作来选择数据:
In [40]: df[df > 0] Out[40]: A B C D 2013-01-01 0.469112 NaN NaN NaN 2013-01-02 1.212112 NaN 0.119209 NaN 2013-01-03 NaN NaN NaN 1.071804 2013-01-04 0.721555 NaN NaN 0.271860 2013-01-05 NaN 0.567020 0.276232 NaN 2013-01-06 NaN 0.113648 NaN 0.524988
使用isin()方法来过滤:
In [41]: df2 = df.copy() #复制一份 In [42]: df2['E'] = ['one', 'one','two','three','four','three'] #df['列名']=[#长度匹配#] 可直接赋值或修改或增加 In [43]: df2 Out[43]: A B C D E 2013-01-01 0.469112 -0.282863 -1.509059 -1.135632 one 2013-01-02 1.212112 -0.173215 0.119209 -1.044236 one 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 two 2013-01-04 0.721555 -0.706771 -1.039575 0.271860 three 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 four 2013-01-06 -0.673690 0.113648 -1.478427 0.524988 three In [44]: df2[df2['E'].isin(['two','four'])] Out[44]: A B C D E 2013-01-03 -0.861849 -2.104569 -0.494929 1.071804 two 2013-01-05 -0.424972 0.567020 0.276232 -1.087401 four
增加、修改DF
增加一个新的列,除了像上例中直接增加,还可以通过建立Series,添加In [45]: s1 = pd.Series([1,2,3,4,5,6], index=pd.date_range('20130102', periods=6)) In [46]: s1 Out[46]: 2013-01-02 1 2013-01-03 2 2013-01-04 3 2013-01-05 4 2013-01-06 5 2013-01-07 6 Freq: D, dtype: int64 In [47]: df['F'] = s1
修改某个位置的数据,两种方式等价,但处理的数据位置不同哦~:
In [48]: df.at[dates[0],'A'] = 0 In [49]: df.iat[0,1] = 0
通过一个numpy数组设置一组新值:
In [50]: df.loc[:,'D'] = np.array([5] * len(df)) #[:,'D']设置范围为D列,所有行
上述操作结果如下:
In [51]: df Out[51]: A B C D F 2013-01-01 0.000000 0.000000 -1.509059 5 NaN 2013-01-02 1.212112 -0.173215 0.119209 5 1.0 2013-01-03 -0.861849 -2.104569 -0.494929 5 2.0 2013-01-04 0.721555 -0.706771 -1.039575 5 3.0 2013-01-05 -0.424972 0.567020 0.276232 5 4.0 2013-01-06 -0.673690 0.113648 -1.478427 5 5.0
缺失值处理
在pandas中,使用np.nan来代替缺失值,这些值将默认不会包含在计算中。缺失值的填充:
In [59]: df1.fillna(value=5) Out[59]: A B C D F E 2013-01-01 0.000000 0.000000 -1.509059 5 5.0 1.0 2013-01-02 1.212112 -0.173215 0.119209 5 1.0 1.0 2013-01-03 -0.861849 -2.104569 -0.494929 5 2.0 5.0 2013-01-04 0.721555 -0.706771 -1.039575 5 3.0 5.0
去掉包含缺失值的行:
In [58]: df1.dropna(how='any') Out[58]: A B C D F E 2013-01-02 1.212112 -0.173215 0.119209 5 1.0 1.0
reindex()方法可以对指定轴上的索引进行改变/增加/删除操作,这将返回原始数据的一个拷贝:
In [55]: df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + ['E']) In [56]: df1.loc[dates[0]:dates[1],'E'] = 1 In [57]: df1 Out[57]: A B C D F E 2013-01-01 0.000000 0.000000 -1.509059 5 NaN 1.0 2013-01-02 1.212112 -0.173215 0.119209 5 1.0 1.0 2013-01-03 -0.861849 -2.104569 -0.494929 5 2.0 NaN 2013-01-04 0.721555 -0.706771 -1.039575 5 3.0 NaN
对数据进行布尔填充:
In [60]: pd.isnull(df1) Out[60]: A B C D F E 2013-01-01 False False False False True False 2013-01-02 False False False False False False 2013-01-03 False False False False False True 2013-01-04 False False False False False True
字符串操作
都在这里了,下次整理吧~画图
都在这里了,下下次整理吧嗯~相关文章推荐
- 利用Python进行数据分析(11) pandas基础: 层次化索引
- 利用python进行数据分析-pandas入门2
- 利用Python进行数据分析(9) pandas基础: 汇总统计和计算
- 利用Pythonj进行数据分析学习笔记——第五章 pandas入门
- 利用Python进行数据分析(12) pandas基础: 数据合并
- 利用Python进行数据分析(10) pandas基础: 处理缺失数据
- python - 利用Pandas对某app数据进行整理、分析并存入mongodb
- 利用python进行数据分析(三):pandas--处理数据的工具
- 利用 Python 进行数据分析(七)pandas 简单介绍(Series 和 DataFrame)
- 利用python进行数据分析-pandas入门3
- 利用 Python 进行数据分析(八)pandas 基本操作(Series 和 DataFrame)
- 利用python进行数据分析之pandas库的应用(二)
- 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍
- 利用Python进行数据分析 pandas基础: 处理缺失数据
- 利用python进行数据分析-pandas.concat/subplots/gropuby/pivot_table,多文件整合、聚合、分组,子图
- 利用 Python 进行数据分析(九)pandas 汇总统计和计算
- 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍
- 利用python进行数据分析-pandas入门
- 利用Python进行数据分析(11) pandas基础: 层次化索引
- 利用Python进行数据分析(14) pandas基础: 数据转换