首页 > 代码库 > Pandas 操作
Pandas 操作
一、Series的创建:
pd.Series([ 数据 ])
In [17]: import pandas as pd In [18]: import numpy as np In [19]: s = pd.Series([1,1,1,1,np.nan]) In [20]: s Out[20]: 0 1.0 1 1.0 2 1.0 3 1.0 4 NaN dtype: float64
二、生成DataFrame
1,Numpy 产生随机数组
In [17]: np.random.rand(5,5) # 生成5 x 5 的数组 Out[17]: array([[ 0.67935636, 0.75784959, 0.85428253, 0.73356 , 0.60555467], [ 0.93576592, 0.81445114, 0.18213442, 0.4784346 , 0.14720462], [ 0.57083505, 0.62618339, 0.13534874, 0.19513107, 0.7190744 ], [ 0.66931535, 0.50888897, 0.00685189, 0.16140523, 0.68407209], [ 0.91081342, 0.67702016, 0.32823171, 0.43670926, 0.98735408]])
2,Pandas 生成连续日期
In [18]: pd.date_range(‘20180101‘,periods=6) Out[18]: DatetimeIndex([‘2018-01-01‘, ‘2018-01-02‘, ‘2018-01-03‘, ‘2018-01-04‘, ‘2018-01-05‘, ‘2018-01-06‘], dtype=‘datetime64[ns]‘, freq=‘D‘)
3,生成带index和columns的DataFrame
In [19]: df = pd.DataFrame(np.random.rand(6,4),index=pd.date_range(‘20180101‘,periods=6),columns=[‘a‘,‘b‘,‘c‘,‘d‘]) # 第一个参数为数据,第二个参数index为索引,第三个参数columns为列名 In [20]: df Out[20]: a b c d 2018-01-01 0.202113 0.205094 0.456936 0.535537 2018-01-02 0.912747 0.812827 0.856495 0.872259 2018-01-03 0.303067 0.832261 0.279915 0.297952 2018-01-04 0.480393 0.315161 0.333675 0.072642 2018-01-05 0.965324 0.561682 0.565189 0.503561 2018-01-06 0.959792 0.227326 0.970319 0.757595
4,Pandas 生成二维数组和一维数组
In [6]: arr = np.arange(12) # 一维数组 In [7]: arr Out[7]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
In [9]: arr = np.arange(12).reshape(3,4) # 二维数组
In [10]: arr
Out[10]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
5,生成一个没有定义index和column的DataFrame (如果没有定义,index和column则为数字)
In [11]: df = pd.DataFrame(arr) # 直接将二维数组传入即可 In [12]: df Out[12]: 0 1 2 3 0 0 1 2 3 1 4 5 6 7 2 8 9 10 11
6,利用数组生成DataFrame
In [13]: arr = {"a":[1]*3,"b":[2]*3,"c":[3]*3} # 定义数组 In [14]: arr Out[14]: {‘a‘: [1, 1, 1], ‘b‘: [2, 2, 2], ‘c‘: [3, 3, 3]}
#生成DataFrame
In [16]: df = pd.DataFrame(arr) In [17]: In [17]: df Out[17]: a b c 0 1 2 3 1 1 2 3 2 1 2 3
三、DataFrame的基本操作
1,取某一列
In [20]: df[‘a‘] Out[20]: 0 1 1 1 2 1 Name: a, dtype: int64
2,查看数组类型dtypes
In [21]: df.dtypes Out[21]: a int64 b int64 c int64 dtype: object
3,查看索引index
In [23]: df.index
Out[23]: RangeIndex(start=0, stop=3, step=1)
4,查看列cloumns
In [24]: df.columns Out[24]: Index([u‘a‘, u‘b‘, u‘c‘], dtype=‘object‘)
5,查看值values
In [25]: df.values Out[25]: array([[1, 2, 3], [1, 2, 3], [1, 2, 3]], dtype=int64)
6,查看数据的总结describe
In [32]: df.describe() Out[32]: a b c count 3.0 3.0 3.0 mean 1.0 2.0 3.0 std 0.0 0.0 0.0 min 1.0 2.0 3.0 25% 1.0 2.0 3.0 50% 1.0 2.0 3.0 75% 1.0 2.0 3.0 max 1.0 2.0 3.0
7,翻转数据 transpose、T
In [37]: df.transpose() Out[37]: 0 1 2 a 1 1 1 b 2 2 2 c 3 3 3 In [38]: df.T Out[38]: 0 1 2 a 1 1 1 b 2 2 2 c 3 3 3
四,对DataFrame的索引(index)进行排序
df.sort_index(axis=0,ascending=True) #axis为0代表对行排序1代表对列。ascending为True代表正序,False代表反序
# 行,正序
In [43]: df.sort_index(axis=0,ascending=True) Out[43]: a b c 0 1 2 3 1 1 2 3 2 1 2 3
# 行,反序
In [44]: df.sort_index(axis=0,ascending=False) Out[44]: a b c 2 1 2 3 1 1 2 3 0 1 2 3
#列,正序
In [46]: df.sort_index(axis=1,ascending=True) Out[46]: a b c 0 1 2 3 1 1 2 3 2 1 2 3
#列,反序
In [45]: df.sort_index(axis=1,ascending=False) Out[45]: c b a 0 3 2 1 1 3 2 1 2 3 2 1
五,对DataFrame数据进行选择
1,简单筛选 df.A = df[‘A‘]
# 生成一个DataFrame
In [58]: dates = pd.date_range(‘20130101‘, periods=6) ...: df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates, columns=[‘A‘,‘B‘,‘C‘,‘D‘]) ...:
In [63]: df.A Out[63]: 2013-01-01 0 2013-01-02 4 2013-01-03 8 2013-01-04 12 2013-01-05 16 2013-01-06 20 Freq: D, Name: A, dtype: int32 In [64]: df[‘A‘] Out[64]: 2013-01-01 0 2013-01-02 4 2013-01-03 8 2013-01-04 12 2013-01-05 16 2013-01-06 20 Freq: D, Name: A, dtype: int32
2,按索引或者索引下标进行筛选
In [60]: df[0:3] # 按照索引进行筛选 Out[60]: A B C D 2013-01-01 0 1 2 3 2013-01-02 4 5 6 7 2013-01-03 8 9 10 11 In [61]: df[‘20130101‘:‘20130102‘] # 按照索引下标值进行筛选 Out[61]: A B C D 2013-01-01 0 1 2 3 2013-01-02 4 5 6 7
3,使用loc进行标签筛选 df.loc[‘行‘,[列]]
列的格式为list,其中 : 代表全部。行只能筛选一行,列能筛选多列
# 只有行
In [66]: df.loc[‘20130102‘] # 只有一个参数,默认是对行 Out[66]: A 4 B 5 C 6 D 7 Name: 2013-01-02 00:00:00, dtype: int32
# 只有列
In [71]: df.loc[:,[‘A‘]] Out[71]: A 2013-01-01 0 2013-01-02 4 2013-01-03 8 2013-01-04 12 2013-01-05 16 2013-01-06 20
# 全部行,特定列
In [72]: df.loc[:,[‘A‘,‘B‘,‘C‘]] Out[72]: A B C 2013-01-01 0 1 2 2013-01-02 4 5 6 2013-01-03 8 9 10 2013-01-04 12 13 14 2013-01-05 16 17 18 2013-01-06 20 21 22
# 全部列,特定行(只能筛选一行)
In [81]: df.loc[‘20130101‘,:] Out[81]: A 0 B 1 C 2 D 3 Name: 2013-01-01 00:00:00, dtype: int32
# 特定列,特定行
In [82]: df.loc[‘20130101‘,[‘A‘,‘B‘,‘C‘]] Out[82]: A 0 B 1 C 2 Name: 2013-01-01 00:00:00, dtype: int32
4,使用iloc进行位置筛选 df.loc[[行],[列]]
行和列的格式为list,其中 : 代表全部。这里的取值并不是list中的范围,例如 [0:5] 并不代表第0条到第5条,而是代表第0条和第5条
In [90]: df.iloc[[0,1],[0,3]] Out[90]: A D 2013-01-01 0 3 2013-01-02 4 7 In [91]: df.iloc[[1],[0,3]] Out[91]: A D 2013-01-02 4 7 In [92]: df.iloc[[2,4],[0,3]] Out[92]: A D 2013-01-03 8 11 2013-01-05 16 19
Pandas 操作