Pandas是一个强大的分析结构化数据的工具集;它的使用基础是Numpy(提供高性能的矩阵运算);用于数据挖掘和数据分析,同时也提供数据清洗功能。
1.创建series
- Series (Series)是能够保存任何类型的数据(整数,字符串,浮点数,Python对象等)的一维标记数组。轴标签统称为索引。
- data 参数
- index 索引 索引值必须是唯一的和散列的,与数据的长度相同。 默认np.arange(n)如果没有索引被传递。
- dtype 输出的数据类型 如果没有,将推断数据类型
- copy 复制数据 默认为false
2.创建pandas的数据集
import pandas as pd
import numpy as np
s = pd.Series([10, 8, -1, 5])
2.创建pandas的二维数组
D = [1, 2, 3, 4, 5, 6]
# d创建6行4列的随机数组,行的标签为D列表,列的标签为 ABCD
d = pd.DataFrame(np.random.randn(6, 4), index=D, columns =list('ABCD'))
print(d)
A B C D
1 -0.318852 0.439047 0.443861 1.092378
2 -0.215001 1.751679 -0.581116 2.110583
3 -0.145339 0.725595 -0.799241 0.724937
4 0.554219 -0.614711 -0.340034 0.863184
5 -0.499527 -1.363649 1.409917 -0.814659
6 -0.947423 -0.231889 1.235500 2.948216
3.创建pandas字典表
d = {'A': 1, 'B': pd.Timestamp('20180501'), 'C': range(4), 'D': np.arange(4)}
{'A': 1, 'B': Timestamp('2018-05-01 00:00:00'), 'C': range(0, 4), 'D': array([0, 1, 2, 3])}
4.pandas进行查询
d = pd.DataFrame(np.random.randn(6, 4), index=D, columns =list('ABCD'))
print(d.head(2)) #返回前两行的数据
print(d.tail(3)) #返回后三行的数据
print(d.index) #返回行标签
print(d.columns) #返回列标签
print(d.describe()) #d中所有的数据
A B C D
count 6.000000 6.000000 6.000000 6.000000
mean 0.733938 0.336052 -0.211824 -0.203457
std 1.299046 0.909295 1.039855 0.806579
min -1.207174 -0.755330 -1.657118 -1.022206
25% 0.069177 -0.175005 -0.801098 -0.724940
50% 0.754474 0.193127 -0.255968 -0.388357
75% 1.676870 0.674934 0.410698 0.057652
max 2.276773 1.847568 1.248001 1.208989
print(d.sort_values(by='A')) #按值进行排序,只对A列进行
print(d.sort_values(by=['A','B'])) #按值进行排序,只对A,B列进行
loc函数:通过行索引 “Index” 中的具体值来取行数据(如取"Index"为"A"的行)
iloc函数:通过行号来取行数据(如取第二行的数据)
5.创建新的列
d2 = d.copy()
tag = ['a']*2 +['b']*2 + ['c']*2
d2['TAG'] = tag
print(d2)
A B C D TAG
a 0.069315 -0.328903 -0.349061 1.182422 a
b -0.695631 -0.070431 2.193821 1.228758 a
c -1.024980 -1.302820 1.345385 0.530354 b
d -0.708111 -0.449033 0.443670 -0.238342 b
e 0.903455 -0.824840 -0.789286 -3.267754 c
f 0.994902 -1.609022 0.143527 -2.134270 c
Process finished with exit code 0
修改0,0位置的元素为100
d2.iat[0,0] = 100
修改列为0-6有序数
d2.A = range(6)
增加一列数,并把1:3的位置赋值3
df.loc[dates[1:3], 'E'] = 3
A B C D E
2016-06-01 -0.295324 -0.148426 0.945734 -0.033085 NaN
2016-06-02 0.647404 -1.535996 0.544935 1.002284 3.0
2016-06-03 -0.547306 0.203780 2.474886 -0.089196 3.0
2016-06-04 -0.021796 -0.375293 -0.816279 -0.480869 NaN
2016-06-05 -1.438578 0.498506 -1.628534 0.456362 NaN
2016-06-06 0.490184 -0.491266 -1.655759 -0.338104 NaN
缺失项用常数填充
df.fillna(6, inplace = True)
是否包含空数据
print(pd.isnull(df))
A B C D E
2016-06-01 False False False False True
2016-06-02 False False False False False
2016-06-03 False False False False False
2016-06-04 False False False False True
2016-06-05 False False False False True
2016-06-06 False False False False True
apply的用法参考:https://blog.csdn.net/stone0823/article/details/100008619
df.apply(np.cumsum)
A、B、C、D、E列的最大值减去最小值
print(df.apply(lambda x : x.max() - x.min()))
查看随机数中每一个数值有多少个,最多的是哪一个数
A 3.511884
B 2.292982
C 1.885054
D 2.452798
E 0.000000
dtype: float64
s = pd.Series(np.random.randint(10,20, size=20))
print(s.value_counts()) #查看每一个数值有多少个
print(s.mode()) #查看最多的一个数
合并数据
(1)将三个部分合并在一起,并查看它们之间的相等关系
dates = pd.date_range('20160601', periods=6)
df1 = pd.DataFrame(np.random.randn(10, 4), columns =list('ABCD'))
df1.iloc[:3]
df1.iloc[3:7]
df1.iloc[7:]
#将三部分合并在一起
df2 = pd.concat([df1.iloc[:3], df1.iloc[3:7], df1.iloc[7:]])
print(df2)
print((df1 == df2).all().all())
True
(2)
left = pd.DataFrame({'key': ['foo', 'foo'], 'lval': [1, 2]})
right = pd.DataFrame({'key': ['foo', 'foo'], 'rval': [4, 5]})
print(left)
print(right)
pd.merge(left, right, on='key') #将两个表拼接在一起,通过key关键字连接
key lval rval
0 foo 1 4
1 foo 1 5
2 foo 2 4
3 foo 2 5
(3)
df1 = pd.DataFrame(np.random.randn(10, 4), columns =list('ABCD'))
s = pd.Series(np.random.randint(1, 5, size=4), index=list('ABCD'))
print(s)
print(df1.append(s, ignore_index=True))
对数组进行分组
df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar',
'foo', 'bar', 'foo', 'foo'],
'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'],
'C': np.random.randn(8),
'D': np.random.randn(8)})
print(df.groupby('A').sum())#将A中所有bar一组的数累加,将foo一组累加