微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

pandas cookbook

目录

pandas cookbook

rename()

给df的列重命名,字典的键值对的形式

df.rename(columns={
"原名":"新名",
"原名":"新名",
"原名":"新名"
......
}
inplace=true
)

.sort_values(ascending)

ascend=True,认,ascend=False
和r里面的arrange一样的功能
排序函数,可以安照升序和降序进行排序,还可以同时指定两个

homelessness_reg_fam = homelessness.sort_values(["region", "family_members"], ascending=[True, False])

日期处理

to_datetime[format=]

subset

提取子集

  • 提取一个子集的时候使用一个["列名"]
  • 提取多个子集的时候使用两个括号[["列名1","列2..,"列名n"]]
    原理也很简单就是外部先生成一个list,完事提取子list
  • 可以只用逻辑运算筛选特定的子集 ,此时返回true or false,那么就可以进一步提取
    例如df["height"]>168,那么提取大于168的就可以使用df[df["height"]>168]
    常见的有>,<,==,and,&...

.isin()

类似于r里面的%in% ,判断是否存在,可以进行过滤

运算符的使用

可以直接进行两列+-*/。。
df.[""]+df.[""]

agg()

可以直接基于列计算统计


除了一般的列之外,时间序列也是同样适用的

The .agg() method allows you to apply your own custom functions to a DataFrame, as well as apply functions to more than one column of a DataFrame at once, making your aggregations super efficient.可以使用agg自定义函数

agg里面可以同时计算几个统计量,不是限定一个

  • Cumulative statistics累计统计
  • .cumsum()
  • .cummax()

counting

drop_duplicates()

去除重复的行
参数

  • subset: 列名,可选,认为None,subset=["",""...""]
  • keep: {‘first’, ‘last’, False}, 认值 ‘first’
    • first: 保留第一次出现的重复行,删除后面的重复行。
    • last: 删除重复项,除了最后一次出现。
    • False: 删除所有重复项。
      -inplace:布尔值,认为False,是否直接在原数据上删除重复项或删除重复项后返回副本。(inplace=True表示直接在原来的DataFrame上删除重复项,而认值False表示生成一个副本。

.value_counts().

查看有多少的不同值,并计算每个值中多多有重复值的数量

group

Grouped summary statistics

sales_by_type = sales.groupby("type")["weekly_sales"].sum()

分组之后可以选取特定特征进行统计运算
可以使用多个变量进行分组,可以统计指定特征的统计

sales_by_type_is_holiday = sales.groupby(["type", "is_holiday"])["weekly_sales"].sum()

额原来的汇总的是这么来的

unemp_fuel_stats = sales.groupby("type")[["unemployment", "fuel_price_usd_per_l"]].agg([np.min, np.max, np.mean, np.median])

<script.py> output:

                           unemployment                      fuel_price_usd_per_l                     
                 amin   amax   mean median                 amin   amax   mean median
    type                                                                            
    A           3.879  8.992  7.973  8.067                0.664  1.107  0.745  0.735
    B           7.170  9.765  9.279  9.199                0.760  1.108  0.806  0.803

pivot_table()

数据透视表

print(sales.pivot_table(values="weekly_sales", index="department", columns="type", aggfunc=aggfunc=[np.sum,np.mean],fill_value=0, margins=True))
  • Values可以对需要的计算数据进行筛选
  • aggfunc参数可以设置我们对数据聚合时进行的函数操作
  • fill_value填充空值,margins=True进行汇总
    可以生成一个数据透视表

set_index()

  • 函数原型:DataFrame.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=False) 
  • keys:列标签或列标签/数组列表,需要设置为索引的列
  • drop:认为True,删除用作新索引的列
  • append:认为False,是否将列附加到现有索引
  • inplace:认为False,适当修改DataFrame(不要创建新对象)
  • verify_integrity:认为false,检查新索引的副本。否则,请将检查推迟到必要时进行。将其设置为false将提高该方法性能

设置多个索引

# Index temperatures by country & city
temperatures_ind = temperatures.set_index(["country", "city"])

# List of tuples: Brazil, Rio De Janeiro & Pakistan, Lahore
rows_to_keep = [("Brazil", "Rio De Janeiro"), ("Pakistan", "Lahore")]

# Subset for rows to keep
print(temperatures_ind.loc[rows_to_keep])
<script.py> output:
                                  date  avg_temp_c
    country  city                                 
    Brazil   Rio De Janeiro 2000-01-01      25.974
             Rio De Janeiro 2000-02-01      26.699
             Rio De Janeiro 2000-03-01      26.270
             Rio De Janeiro 2000-04-01      25.750
             Rio De Janeiro 2000-05-01      24.356
    ...                            ...         ...
    Pakistan Lahore         2013-05-01      33.457
             Lahore         2013-06-01      34.456
             Lahore         2013-07-01      33.279
             Lahore         2013-08-01      31.511
             Lahore         2013-09-01         NaN
    
    [330 rows x 2 columns]

sort_index()

认根据标签对所有行排序,或根据列标签对所有列排序,或根据指定某列或某几列对行排序。
注意:sort_index()可以完成和df. sort_values()完全相同的功能,但python更推荐用只用df. sort_index()对“根据行标签”和“根据列标签”排序,其他排序方式用df.sort_values()

ret_index()

还原索引

loc

iloc

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐