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

可以看到,由于传进来的字典中只有001和002这两个键,于是创建的 Series 中只保留了这两项,而024和065对应的值则是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 个参数,分别有不同的用途,比如指定分隔符、指定哪一行做为列名、跳过开头几行、忽略末尾几行等等。可以通过查看文档了解。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdzds.html