关于人工智能:这20个Pandas函数可以完成80的数据科学工作

0次阅读

共计 7072 个字符,预计需要花费 18 分钟才能阅读完成。

Pandas 是数据迷信社区中应用最宽泛的库之一,它是一个弱小的工具,能够进行数据操作、清理和剖析。本文将提供最罕用的 Pandas 函数以及如何理论应用它们的样例。咱们将涵盖从根本数据操作到高级数据分析技术的所有内容,到本文完结时,你会深刻理解如何应用 Pandas 并使数据迷信工作流程更高效。

1、pd.read_csv ()

read_csv 用于读取 CSV(逗号分隔值)文件并将其转换为 pandas DataFrame。

 import pandas as pd
 df = pd.read_csv('Popular_Baby_Names.csv')

在这个例子中,pd.read_csv 函数读取文件 ’ data.csv ‘ 并将其转换为一个 DataFrame,它有许多选项,如 sep, header, index_col, skiprows, na_values 等。

 df = pd.read_csv('Popular_Baby_Names.csv', sep=';', header=0, index_col=0, skiprows=5, na_values='N/A')

这个例子读取 CSV 文件 data.csv,应用; 作为分隔符,第一行作为题目,第一列作为索引,跳过前 5 行,将 N / a 替换为 NaN。

2、df.describe ()

df.describe()办法用于生成 DataFrame 的各种特色的汇总统计信息。它返回一个新的 DataFrame,其中蕴含原始 DataFrame 中每个数值列的计数、平均值、标准差、最小值、第 25 百分位、中位数、第 75 百分位和最大值。

 print(df.describe())

通过向办法传递适当的参数,还能够包含或排除某些列,比方排除非数值列。

 df.describe(include='all')  # include all columns

 df.describe(exclude='number') # exclude numerical columns

3、df.info ()

df.info()能够取得 DataFrame 的扼要摘要,包含每列中非空值的数量、每列的数据类型以及 DataFrame 的内存应用状况。

 print(df.info())

4、df.plot ()

df.plot()能够从 DataFrame 创立各种类型的图。默认状况下,它在 DataFrame 中创立所有数值列的线状图。然而你也能够通过参数 kind 来指定你想要创立的图形类型。可选选项有 line、bar、barh、hist、box、kde、density、area、pie、scatter 和 hexbin。

在上面的例子中,将应用.plot()办法绘制数值变量和分类变量。对于分类变量,将绘制条形图和饼状图,对于数值变量,将绘制箱形图。

 df['Gender'].value_counts().plot(kind='bar')

 df['Gender'].value_counts().plot(kind='pie')

 df['Count'].plot(kind='box')

它还反对许多其余选项,如 title

,

xlabel

,

ylabel

,

legend

,

grid

,

xlim

,

ylim

,

xticks

,

yticks 等,df.plot()只是 matplotlib 的一个不便包装。所以 matplotlib 的参数都能够在 df.plot 中应用

5、df.iloc ()

.iloc()函数用于依据索引抉择行和列

 print(df.iloc[0])

 print(df.iloc[:2])

 print(df.iloc[:, 0])

 print(df.iloc[:, :2])

 print(df.iloc[1, 1])

在下面的例子中,df.Iloc[0]抉择第一行,Iloc[:2]抉择前两行,Iloc[:,0]抉择第一列,Iloc[:,:2]抉择前两列,Iloc[1,1]抉择位于 (第二行,第二列)(1,1) 地位的元素。

.iloc()只依据它们基于整数的索引抉择行和列,所以如果您想依据它们的标签抉择行和列,应该应用.loc()办法,如下所示。

6、df.loc ()

.loc()函数用于依据 DataFrame 中基于标签的索引抉择行和列。它用于依据基于标签的地位抉择行和列。

 print(df.loc[:, ['Year of Birth', 'Gender']])

在下面的例子中,df.loc[:, [‘Year of Birth’, ‘Gender’]]抉择名为 ’ 出世年份 ’ 和 ’ 性别 ’ 的列。

7、df.assign ()

.assign()函数用于依据现有列的计算向 DataFrame 增加新列。它容许您在不批改原始数据的状况下增加新列。该函数会返回一个增加了列的新 DataFrame。

 df_new = df.assign(count_plus_5=df['Count'] + 5)
 df_new.head()

在下面的例子中,df.assign()第一次被用来创立一个名为 ’count_plus_5’ 的,值为 count + 5 的新列。

原始的 df 放弃不变,返回新的 df_new,并增加了新的列。.assign()办法能够在一个链中屡次应用,能够在一行代码中增加多个新列。

8、df.query ()

.query()函数能够依据布尔表达式过滤数据。能够应用相似于 SQL 的查问字符串从 DataFrame 中抉择行。该函数返回一个新的 DataFrame,其中只蕴含满足布尔表达式的行。

 df_query = df.query('Count > 30 and Rank < 20')
 df_query.head()

 df_query = df.query("Gender =='MALE'")
 df_query.head()

在下面的例子中,应用 df.query()来抉择 Count 大于 30 且 Rank 小于 30 的行,第二次应用 df.query()来抉择 Gender 为 ’MALE’ 的行。

原始的 DataFrame df 放弃不变,df_query 返回过滤后新的 DataFrame。

.query()办法能够与任何无效的布尔表达式一起应用,当你心愿基于多个条件筛选 DataFrame,或者当条件简单且难以使用规范索引操作符示意时,它十分有用。

另外请记住.query()办法很慢,所以如果性能很要害,应该尽量避免应用。

9、df.sort_values ()

.sort_values()函数能够按一列或多列对数据进行排序。它依据一个或多个列的值按升序或降序对 DataFrame 进行排序。该函数返回一个按指定列排序的新 DataFrame。

 df_sorted = df.sort_values(by='Count')
 df_sorted.head()

 df_sorted = df.sort_values(by='Rank', ascending=False)
 df_sorted.head()

 df_sorted = df.sort_values(by=['Count', 'Rank'])
 df_sorted.head()

在下面的例子中,第一次应用 df.sort_values()按“Count”升序对 DataFrame 排序,第二次应用按“Rank”降序排序,最初一次应用按多个列“Count”和“Rank”排序。

.sort_values()办法可用于 DataFrame 的任何列,当心愿基于多个列对 DataFrame 进行排序时,或者当心愿按列降序对 DataFrame 进行排序时,它十分有用。

10、df.sample ()

.sample()函数能够从数据帧中随机抉择行。它返回一个蕴含随机抉择的行的新 DataFrame。该函数采纳几个参数,能够管制采样过程。

 df_sample = df.sample(n=2, replace=False, random_state=1)
 df_sample

 df_sample = df.sample(n=3, replace=True, random_state=1)
 df_sample

 df_sample = df.sample(n=2, replace=False, random_state=1, axis=1)
 df_sample

在下面的例子中,第一次应用 df.sample()随机抉择 2 行,第二次应用 df.sample()随机抉择 3 行,最初一次应用 df.sample()随机抉择 2 列。

当心愿随机抉择数据子集进行测试或验证时,或者当心愿随机抉择行样本进行进一步剖析时,.sample()办法十分有用。random_state 参数对于再现性很有用,应用 axis= 1 参数能够抉择列。

11、df.isnull ()

isnull()办法返回一个与原始 DataFrame 形态雷同的 DataFrame,通过 True 或 False 值,批示原始 DataFrame 中的每个值是否缺失。缺失的值 NaN 或 None,在后果的 DataFrame 中将为 True,而非缺失的值将为 False。

 df.isnull()

12、df.fillna ()

fillna()办法用于用指定的值或办法填充 DataFrame 中的缺失值。默认状况下,它用 NaN 替换缺失的值,也能够指定一个不同的值来代替,个别状况下能够应用以下的参数:

  • value: 指定用来填充缺失值的值。能够是标量值,也能够是不同列的值的字典。
  • method: 指定用于填充缺失值的办法。能够是 ’ffill'(向前填充)或 ’bfill'(向后填充)或 ’interpolate'(插值值)或 ’pad’ 或 ’backfill’
  • axis: 指定填充缺失值的轴。它能够是 0(行)或 1(列)。
  • inplace: 是将缺失的值填充到位(批改原始的 DataFrame),还是返回一个新的 DataFrame。
  • limit: 指定要填充的间断缺失值的最大数量。
  • downcast: 指定一个值字典,用于向下转换列的数据类型。
 df.fillna(0)
 
 df.fillna(method='ffill')
 
 df.fillna(method='bfill')
 
 df.interpolate()

须要留神的是,fillna()办法返回一个新的 DataFrame,并不批改原始的 DataFrame。如果想批改原始的 DataFrame,能够应用 inplace 参数并将其设置为 True。

 df.fillna(0, inplace=True)

13、df.dropna ()

df.dropna()能够从 DataFrame 中删除缺失值或空值。它从 DataFrame 中删除至多缺失一个元素的行或列。能够通过调用 df.dropna()删除蕴含至多一个缺失值的所有行。

 df = df.dropna()

如果只想删除蕴含至多一个缺失值的列,能够应用 df.dropna(axis=1)

 df = df.dropna(axis=1)

你还能够设置 thresh 参数,只保留至多具备阈值非 na /null 值的行 / 列。

 df = df.dropna(thresh=2)

14、df.drop ()

df.drop()能够通过指定的标签从 DataFrame 中删除行或列。它能够用于删除一个或多个基于标签的行或列。

你能够通过调用 df.drop()来删除特定的行,并传递想要删除的行的索引标签,并将 axis 参数设置为 0(默认为 0)。

 df_drop = df.drop(0)

这将删除 DataFrame 的第一行。

也能够通过传递一个索引标签列表来删除多行:

 df_drop = df.drop([0,1])

这将删除 DataFrame 的第一行和第二行。能够通过传递想要删除的列的标签并将 axis 参数设置为 1 来删除列:

 df_drop = df.drop(['Count', 'Rank'], axis=1)

15、pd.pivot_table ()

pd.pivot_table()能够从 DataFrame 创立数据透视表。透视表是一种以更有意义和更有组织的形式总结和聚合数据的表。在上面的例子中,将创立一个以 Ethnicity 为索引的透视表,并汇总计数的总和。这用于理解数据集中每个 Ethnicity 的计数。

 pivot_table = pd.pivot_table(df, index='Ethnicity', values='Count', aggfunc='sum')
 pivot_table.head()

通过指定多个索引和值参数,能够在透视表中蕴含更多列,还能够包含多个 aggfunc 函数。

 pivot_table = pd.pivot_table(df, index=['Ethnicity','Gender'], values= 'Count' , aggfunc=['sum','count'])
 pivot_table.head(20)

16、df.groupby ()

df.groupby()用于依据一个或多个列对 DataFrame 的行进行分组。并且能够对组执行聚合操作,例如计算每个组中值的平均值、和或计数。

df.groupby()返回一个 GroupBy 对象,而后能够应用该对象对组执行各种操作,例如计算每个组中值的和、平均值或计数。

 grouped = df.groupby('Gender')
 print(grouped.mean())

 grouped = df.groupby(['Gender', 'Ethnicity'])
 print(grouped.sum())

17、df.transpose ()

df.transpose()用于转置 DataFrame 的行和列,这意味着行变成列,列变成行。

 df_transposed = df.transpose()
 df_transposed.head()

也能够应用 df 上的 T 属性来实现。df.T 和 df.transpose()是一样的。

18、df.merge ()

df.merge()能够依据一个或多个公共列组合两个 dataframe。它相似于 SQL join。该函数返回一个新的 DataFrame,其中只蕴含两个 DataFrame 中指定列中的值匹配的行。

 df1 = pd.DataFrame({'key': ['A', 'B', 'C', 'D'],
                    'value': [1, 2, 3, 4]})
 df2 = pd.DataFrame({'key': ['B', 'D', 'E', 'F'],
                    'value': [5, 6, 7, 8]})
 
 merged_df = df1.merge(df2, on='key')
 print(merged_df)

两个 df 通过 key 列进行了合并,雷同的列名会被增加 x 和y。

你也能够通过别离传递 how = ‘ left ‘、how = ‘ right ‘ 或 how = ‘ outer ‘ 来应用左连贯、右连贯和外连贯。

还能够通过将列列表传递给 on 参数来合并多个列。

 merged_df = df1.merge(df2, on=['key1','key2'])

还能够应用 left_on 和 right_on 参数指定要合并的不同列名。

 merged_df = df1.merge(df2, left_on='key1', right_on='key3')

merge()函数有许多选项和参数,能够管制合并的行为,例如解决缺失的值,保留所有行还是只保留匹配的行,合并哪些列等等。

19、df.rename ()

df.rename()能够更改 DataFrame 中一个或多个列或行的名称。能够应用 columns 参数更改列名,应用 index 参数更改行名。

 df_rename = df.rename(columns={'Count': 'count'})
 df_rename.head()

也能够应用字典一次重命名多个列:

 df_rename = df.rename(columns={'Count': 'count', 'Rank':'rank'})
 df_rename.head()

重命名索引:

 df_rename = df.rename(index={0:'first',1:'second',2:'third'})
 df_rename.head()

20、df.to_csv ()

df.to_csv()能够将 DataFrame 导出到 CSV 文件。与下面的 Read_csv 作为对应。调用 df.to_csv()将 DataFrame 导出到 CSV 文件:

 df.to_csv('data.csv')

能够通过传递 sep 参数来指定 CSV 文件中应用的分隔符。默认状况下,它被设置为“,”。

 df.to_csv('path/to/data.csv', sep='\t')

也能够通过将列名列表传递给 columns 参数来只保留 DataFrame 的特定列,通过将布尔掩码传递给索引参数来只保留特定的行。

 df.to_csv('path/to/data.csv', columns=['Rank','Count'])

还能够应用 index 参数指定在导出的 CSV 文件中蕴含或不蕴含 dataframe 的索引。

 df.to_csv('path/to/data.csv', index=False)

应用 na_rep 参数将导出的 CSV 文件中缺失的值替换为指定的值。

 df.to_csv('path/to/data.csv', na_rep='NULL')

总结

以上这 20 个 pandas 函数,相对能够帮忙咱们万行 80% 以上的工作,咱们这里只是简略的总结,想 group,merge 等参数比拟多并且罕用的函数能够通过 pandas 的文档进一步相熟,这将对咱们的工作有很大的帮忙。

https://avoid.overfit.cn/post/a8b2e01b2bda48699230e840cef04080

作者:Youssef Hosni

正文完
 0