Python pandas操作

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一组累加
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值