Pandas手册(2)- DataFrame

Python
Pandas


DataFrame是2维的标签数组,可以把他当成电子表格(Excel),数据库里的表,a dict of Series。
DataFrame初始化,也可以有不同的输入,


在Series中呢,我们有一个index的概念,在DataFrame中,我们除了index,还有一个columns的概念
index:行标签
columns:列标签

DataFrame初始化

class pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)

我们看到,这里有data,index,columns
我们可以只初始化data,其他都默认

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(5))

print(df)

我们看到,index,依然是下标从0开始,columns呢,也是从0开始的
我们可以,初始化index,和columns

df = pd.DataFrame(np.random.randn(5),index=['i1','i2','i3','i4','i5'],
                  columns=['a'])

From dict of Series or dicts

d = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
     'two' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)

这里,我们定义一个dict,value是Series,就是我们给2个一维数组都加了一个key,然后把他们拼到一起,就成了一个DataFrame,key就变成了columns

为了让数据均匀,空的数据会默认为NaN
这些都是默认的,我们也可以显示初始化index和columns

df = pd.DataFrame(d,index=['a','c','p','q'])

我们显示初始化index的话,会用我们指定的index去和data中Series的index去匹配,匹配上了就使用,匹配不上就剔除掉了,如上,只有'a','c'是有的,所以其他的都剔除掉了,像'p','q'是data中没有的,所以就是用NAN代替了
columns也是同样的道理

df = pd.DataFrame(d,index=['a','b','c'],columns=['id','one','age'])

我们可以查看DataFrame的index和columns

print(df.index)
print(df.columns)

From dict of ndarray/lists

d = {'one' : [1., 2., 3., 4.],'two' : [4., 3., 2., 1.]}

df = pd.DataFrame(d)
image.png

index会默认初始化,range(n)
这时,我们显示初始化index的时候,index的长度一定要和dict中ndarray的长度一样,不然,会报错

df = pd.DataFrame(d,index=['a','b','c','d','e'])

From structured or record array

data = np.zeros((2,), dtype=[('A', 'i4'),('B', 'f4'),('C', 'a10')])
data[:] = [(1,2.,'Hello'), (2,3.,"World")]

df = pd.DataFrame(data)
print(df)

这里先定义了一个数据结构,(对numpy还不熟,希望没说错),2行,3列,分别指定了每一列的数据类型;
然后进行初始化


这里的index是默认range(n)初始化的,columns是data中指定的名字,numpy中的数组后面也得学习下

df = pd.DataFrame(data,index=['ff','ss'])

我们显示初始化index的话,一定要和data中的行数一样,
columns的话,会取data中名字一样的

df = pd.DataFrame(data, columns=['one','two','C','B','A'])

From a list of dicts

data2 = [{'a': 1, 'b': 2}, {'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data2)
print(df)

这里会将list中的元素做一个union,合并到一起去,
如果显示初始化index,columns的话,index的长度一个要和list的长度一致,columns 的话,则会自动处理,有则显示,无则显示NAN(有无表示是否和dict中的key匹配的上)

df = pd.DataFrame(data2,index=['x','y'],columns=['a','b','c','d'])

From a dict of tuples

df2 = pd.DataFrame({('a', 'b'): {('A', 'B'): 1, ('A', 'C'): 2},
              ('a', 'a'): {('A', 'C'): 3, ('A', 'B'): 4},
              ('a', 'c'): {('A', 'B'): 5, ('A', 'C'): 6},
              ('b', 'a'): {('A', 'C'): 7, ('A', 'B'): 8},
              ('b', 'b'): {('A', 'D'): 9, ('A', 'B'): 10}})
print(df2)

这个感觉类似Excel里面合并单元格的操作,就不多做练习了,啥时候用上了再说


From a Series

这个和前面都比较类似,我们看个例子

s = pd.Series(np.random.randn(5),index=['a','b','c','d','e'])
print(s)
df3 = pd.DataFrame(s,index=['x','y','a','b'])
print(df3)

常用构造函数

这里就不多说了,大家可以自行学习下


Column selection,addition,deletion

这里主要是说对DataFrame中对column的一些操作

d = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']),
     'two' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)
print(df)
#输出列名为one的数据
print(df['one'])
#给列three赋值,one列*two列
df['three'] = df['one']*df['two']
#给列flag赋值,one列的值是否大于2
df['flag'] = df['one'] > 2
print(df)

删除操作

del df['flag']
df.pop('three')
print(df)
DataFrame.insert(loc, column, value, allow_duplicates=False)[source]

关于DataFrame的其他操作,后面会再详细说明,这里就简单说到这了。

附录(参考资料)

官方教程:DataFrame

---------update at 2017-08-07

DataFrame使用后记

记录下DataFrame使用的小技巧

索引对象

pandas中的索引对象负责管理轴标签和其他元数据(比如轴名称)。构建Series或DataFrame时,所用到的任何数组或其他序列的标签都会
转换成一个index。
索引创建后是不可以修改的

obj = pd.Series([4, 7, -5, 3])

obj
Out[144]: 
0    4
1    7
2   -5
3    3
dtype: int64

obj.index
Out[145]: RangeIndex(start=0, stop=4, step=1)

o_ind = obj.index

o_ind
Out[147]: RangeIndex(start=0, stop=4, step=1)

o_ind[0]=9
Traceback (most recent call last):

  File "", line 1, in 
    o_ind[0]=9

  File "D:\Users\yugui\Anaconda3\lib\site-packages\pandas\core\indexes\base.py", line 1620, in __setitem__
    raise TypeError("Index does not support mutable operations")

TypeError: Index does not support mutable operations

你可能感兴趣的:(Pandas手册(2)- DataFrame)