文末领取【示例数据集+代码过程】 本文一共为大家分享25个pandas技巧,分为两篇分享给大家。首先我们需要先提前下载好示例数据集,小编已经帮大家整理好了,文末添加客服即可领取。 利用以下代码导入上述数据集: In [1]: import pandas as pd import numpy as np
In [6]: drinks = pd.read_csv('http:///drinksbycountry') movies = pd.read_csv('http:///imdbratings') orders = pd.read_csv('http:///chiporders', sep='\t') orders['item_price'] = orders.item_price.str.replace('$', '').astype('float') stocks = pd.read_csv('http:///smallstocks', parse_dates=['Date']) titanic = pd.read_csv('http:///kaggletrain') ufo = pd.read_csv('http:///uforeports', parse_dates=['Time']) 输入下面的命令查询pandas版本:
如果你还想知道pandas所依赖的模块的版本,你可以使用show_versions()函数: In [9]: pd.show_versions()
INSTALLED VERSIONS ------------------ commit: None python: 3.7.3.final.0 python-bits: 64 OS: Darwin OS-release: 18.6.0 machine: x86_64 processor: i386 byteorder: little LC_ALL: None LANG: en_US.UTF-8 LOCALE: en_US.UTF-8
pandas: 0.24.2 pytest: None pip: 19.1.1 setuptools: 41.0.1 Cython: None numpy: 1.16.4 scipy: None pyarrow: None xarray: None IPython: 7.5.0 sphinx: None patsy: None dateutil: 2.8.0 pytz: 2019.1 blosc: None bottleneck: None tables: None numexpr: None feather: None matplotlib: 3.1.0 openpyxl: None xlrd: None xlwt: None xlsxwriter: None lxml.etree: None bs4: None html5lib: None sqlalchemy: None pymysql: None psycopg2: None jinja2: 2.10.1 s3fs: None fastparquet: None pandas_gbq: None pandas_datareader: None gcsfs: None 你可以查看到Python,pandas, Numpy, matplotlib等的版本信息。 假设你需要创建一个示例DataFrame。有很多种实现的途径,我最喜欢的方式是传一个字典给DataFrame constructor,其中字典中的keys为列名,values为列的取值。 现在如果你需要创建一个更大的DataFrame,上述方法则需要太多的输入。在这种情况下,你可以使用Numpy的random.rand()函数,告诉它行数和列数,将它传递给DataFrame constructor: 这种方式很好,但如果你还想把列名变为非数值型的,你可以强制地将一串字符赋值给columns参数: 你可以想到,你传递的字符串的长度必须与列数相同。 让我们来看一下刚才我们创建的示例DataFrame: 我更喜欢在选取pandas列的时候使用点(.),但是这对那么列名中含有空格的列不会生效。让我们来修复这个问题。
使用这个函数最好的方式是你需要更改任意数量的列名,不管是一列或者全部的列。
In [15]: df.columns = ['col_one', 'col_two'] 如果你需要做的仅仅是将空格换成下划线,那么更好的办法是使用str.replace()方法,这是因为你都不需要输入所有的列名:
上述三个函数的结果都一样,可以更改列名使得列名中不含有空格: 最后,如果你需要在列名中添加前缀或者后缀,你可以使用add_prefix()函数: 或者使用add_suffix()函数: 让我们来看一下drinks这个DataFame: In [20]: drinks.head()
Out[20]:
该数据集描述了每个国家的平均酒消费量。如果你想要将行序反转呢? 最直接的办法是使用loc函数并传递::-1,跟Python中列表反转时使用的切片符号一致:
In [22]: drinks.loc[::-1].reset_index(drop=True).head()
Out[22]:
你可以看到,行序已经反转,索引也被重置为默认的整数序号。 跟之前的技巧一样,你也可以使用loc函数将列从左至右反转:
逗号之前的冒号表示选择所有行,逗号之后的::-1表示反转所有的列,这就是为什么country这一列现在在最右边。 这里有drinks这个DataFrame的数据类型: In [24]: drinks.dtypes
Out[24]: country object beer_servings int64 spirit_servings int64 wine_servings int64 total_litres_of_pure_alcohol float64 continent object dtype: object 假设你仅仅需要选取数值型的列,那么你可以使用select_dtypes()函数:
这包含了int和float型的列。
你还可以选取多种数据类型,只需要传递一个列表即可: 你还可以用来排除特定的数据类型: 让我们来创建另一个示例DataFrame: 这些数字实际上储存为字符型,导致其数据类型为object: 为了对这些列进行数学运算,我们需要将数据类型转换成数值型。你可以对前两列使用astype()函数: 但是,如果你对第三列也使用这个函数,将会引起错误,这是因为这一列包含了破折号(用来表示0)但是pandas并不知道如何处理它。 你可以对第三列使用to_numeric()函数,告诉其将任何无效数据转换为NaN: 如果你知道NaN值代表0,那么你可以fillna()函数将他们替换成0: 最后,你可以通过apply()函数一次性对整个DataFrame使用这个函数: 仅需一行代码就完成了我们的目标,因为现在所有的数据类型都转换成float: pandas DataFrame被设计成可以适应内存,所以有些时候你可以减小DataFrame的空间大小,让它在你的系统上更好地运行起来。
可以看到它使用了30.4KB。
第一个步骤是只读取那些你实际上需要用到的列,可以调用usecols参数: 通过仅读取用到的两列,我们将DataFrame的空间大小缩小至13.6KB。
通过将continent列读取为category数据类型,我们进一步地把DataFrame的空间大小缩小至2.3KB。
假设你的数据集分化为多个文件,但是你需要将这些数据集读到一个DataFrame中。
这是第二天的: 这是第三天的: 你可以将每个CSV文件读取成DataFrame,将它们结合起来,然后再删除原来的DataFrame,但是这样会多占用内存且需要许多代码
glob会返回任意排序的文件名,这就是我们为什么要用Python内置的sorted()函数来对列表进行排序。
不幸的是,索引值存在重复。为了避免这种情况,我们需要告诉concat()函数来忽略索引,使用默认的整数索引: 上一个技巧对于数据集中每个文件包含行记录很有用。但是如果数据集中的每个文件包含的列信息呢?
同上一个技巧一样,我们以使用glob()函数开始。这一次,我们需要告诉concat()函数按列来组合: 现在我们的DataFrame已经有六列了。
爱数据学院每周免费直播课 2020年第1季度城市岗位报告 【深圳、广州、上海、杭州、北京】 直播内容:
|
|