Pandas Series 与 DataFrame 数据创建

>>> import pandas as pd
>>> import numpy as np

>>> print(np.__version__), print(pd.__version__)
1.14.3
0.23.0

Series

从 numpy 数组创建,并指定索引值

>>> s1 = pd.Series(np.random.rand(4), index=['a', 'b', 'c', 'd'])
>>> s1
a    0.390501
b    0.460804
c    0.176490
d    0.465754
dtype: float64

如果没有指定索引,则默认会创建从 0 到 N-1 的数组作为索引值,这里的 N 是 Series 的长度(即它所包含的元素个数):

>>> s2 = pd.Series(np.random.rand(4))
>>> s2
0    0.210839
1    0.979725
2    0.862411
3    0.780342
dtype: float64

通过索引访问元素

>>> s1['c']
0.176490
>>> # 也可以给元素赋值(修改元素值)
>>> s1['c'] = 3.14
>>> # 同时访问多个元素
>>> s1[['c', 'a', 'b']]
c    3.140000
a    0.390501
b    0.460804
dtype: float64

从字典中创建

字典中的键将会作为索引值,字典中的值将会作为元素值:

>>> s3 = pd.Series({'001': 'Nam', '002': 'Mary', '003': 'Peter'})
>>> s3
001      Nam
002     Mary
003    Peter
dtype: object

从字典中创建 Series 时,也可以自定义索引值或者是添加过滤(即指定只从字典中的某几个键进行创建)。当自定义的索引值不存在于字典中的时,默认会用NaN来作为这个索引的值:

>>> s4 = pd.Series({'001': 'Nam', '002': 'Mary', '003': 'Peter'}, index=['002', '001', '024', '065'])
>>> s4
002    Mary
001     Nam
024     NaN
065     NaN
dtype: object

可以看到,由于传进来的字典中只有001002这两个键,于是创建的 Series 中只保留了这两项,而024065对应的值则是NaN

判断元素是否为空

>>> pd.isnull(s4)
002    False
001    False
024     True
065     True
dtype: bool

从标量值创建

>>> s5 = pd.Series(2.71, index=['x', 'y'])
>>> s5
x    2.71
y    2.71
dtype: float64

可以理解为:指定多少个索引,创建的 Series 中就会包含多少个相同值的元素

相加

这里主要演示的是,Pandas 会自动根据索引来对齐两个 Series 然后再进行数学运算

>>> s6 = pd.Series(np.array([2.71, 3.14]), index=['z', 'y'])
>>> s6
z    2.71
y    3.14
dtype: float64
>>> s5 + s6
x     NaN
y    5.85
z     NaN
dtype: float64

DataFrame

从字典中创建

>>>  data = {'Year': [2000, 2005, 2010, 2014],
                     'Median_Age': [24.2, 26.4, 28.5, 30.3],
                     'Density': [244, 256, 268, 279]}
>>> df1 = pd.DataFrame(data)
>>> df1
   Year  Median_Age  Density
0  2000        24.2      244
1  2005        26.4      256
2  2010        28.5      268
3  2014        30.3      279

默认顺序是传进去的字典的顺序,也可以根据列名(column)进行指定:

>>> df2 = pd.DataFrame(data, columns=['Year', 'Density', 'Median_Age'])
>>> df2
   Year  Density  Median_Age
0  2000      244        24.2
1  2005      256        26.4
2  2010      268        28.5
3  2014      279        30.3

也可以像 Series 那样指定索引值:

>>> df3 = pd.DataFrame(data, columns=['Year', 'Density', 'Median_Age'], index=['a', 'b', 'c', 'd'])
>>> df3.index
Index(['a', 'b', 'c', 'd'], dtype='object')

直接从嵌套的列表中创建

>>> df4 = pd.DataFrame([
         ['Peter', 16, 'pupil', 'TN', 'M', None],
         ['Mary', 21, 'student', 'SG', 'F', None],
         ['Nam', 22, 'student', 'HN', 'M', None],
         ['Mai', 31, 'nurse', 'SG', 'F', None],
         ['John', 28, 'laywer', 'SG', 'M', None]],
         columns=['name', 'age', 'careet', 'province', 'sex', 'award'])
>>> # 有两种方式可以取到某一列。前提是这个列名不包含空格等特殊字符
>>> # 如果包含空格,则只能使用第二种方式
>>> df4.name
0    Peter
1     Mary
2      Nam
3      Mai
4     John
Name: name, dtype: object
>>> df4['name']
0    Peter
1     Mary
2      Nam
3      Mai
4     John
Name: name, dtype: object
>>> # 修改某一列(整列)的内容
>>> df4['award'] = None
    name  age   careet province sex award
0  Peter   16    pupil       TN   M  None
1   Mary   21  student       SG   F  None
2    Nam   22  student       HN   M  None
3    Mai   31    nurse       SG   F  None
4   John   28   laywer       SG   M  None

从文件中生成

从 CSV 文件中生成

假设有名为 person.csv 的文件内容如下:

name,age,career,province,sex
Peter,16,pupil,TN,M
Mary,21,student,SG,F
Nam,22,student,HN,M
Mai,31,nurse,SG,F
John,28,lawer,SG,M

可使用read_csv来进行读取,直接生成 DataFrame

>>> df4 = pd.read_csv('person.csv')
>>> df4
    name  age   career   province sex
0   Peter   16    pupil       TN        M
1    Mary   21    student   SG       F
2    Nam   22    student   HN       M
3      Mai   31    nurse      SG       F
4    John   28    lawer      SG       M

0.23.0 版本的 pandas 中的read_csv函数有 49 个参数,分别有不同的用途,比如指定分隔符、指定哪一行做为列名、跳过开头几行、忽略末尾几行等等。可以通过查看文档了解。

posted @ 2019-07-15 15:39  东围居士  阅读(4569)  评论(0编辑  收藏  举报