[Python] 常用模块(5):pandas 5

Python 常用模块系列:

  • [Python] 常用模块(1):内建模块 – random & datetime
  • [Python] 常用模块(2):内建模块 – re 以及正则表达式
  • [Python] 常用模块(3):内建模块 – math & itertools
  • [Python] 常用模块(4):NumPy 上
  • [Python] 常用模块(4):NumPy 中
  • [Python] 常用模块(4):NumPy 下
  • [Python] 常用模块(5):pandas 1
  • [Python] 常用模块(5):pandas 2
  • [Python] 常用模块(5):pandas 3
  • [Python] 常用模块(5):pandas 4
  • [Python] 常用模块(5):pandas 5(本文)
  • [Python] 常用模块(5):pandas 6
  • [Python] 常用模块(5):pandas 7
  • [Python] 常用模块(5):pandas 8
  • [Python] 常用模块(5):pandas 9

数据框的功能函数

功能的映射:df.apply(func, axis = 0)

对数据框的每一行或列使用相同的功能处理。

>>> df = pd.DataFrame([[4, 9],] * 3, columns=['A', 'B'])
>>> df
   A  B
0  4  9
1  4  9
2  4  9
>>> df.apply(np.sqrt)
     A    B
0  2.0  3.0
1  2.0  3.0
2  2.0  3.0

对数据框的每一行或列进行合并功能的处理:df.agg(func, axis = 0)

>>> df = pd.DataFrame([[1, 2, 3],
...                    [4, 5, 6],
...                    [7, 8, 9],
...                    [np.nan, np.nan, np.nan]],
...                   columns=['A', 'B', 'C'])
>>> df.agg(['sum', 'min'])
        A     B     C
sum  12.0  15.0  18.0
min   1.0   2.0   3.0

数据框的分组:df.groupby(by = None, axis = 0)

首先可以创建一个 groupby 对象。

>>> df = pd.DataFrame({"A":np.random.randint(0, 4, 5),
...                    "B":np.random.randn(5),
...                    "name":["a", "b", "a", "b", "b"]})
>>> print(df)
   A         B name
0  1 -0.549746    a
1  3 -1.402873    b
2  0  1.582752    a
3  0 -1.045147    b
4  3  0.257594    b
>>> print(df.groupby("name"))
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x115b67be0>

分组的遍历:

分组在理论上可以看成一个 iterator,这个 iterator 有两个元素,组名和组内元素:

>>> for name, group in df.groupby('name'):
...     print(name)
...     print(group)
a
   A         B name
0  1 -0.549746    a
2  0  1.582752    a
b
   A         B name
1  3 -1.402873    b
3  0 -1.045147    b
4  3  0.257594    b

分组的处理

可以直接在 groupby 语句后接函数,也可以后接 agg 传递函数,不能进行处理的列会自动去掉。

>>> print(df.groupby("name").sum())
      A         B
name             
a     1  1.033006
b     6 -2.190426
>>> print(df.groupby("name").agg(["mean", "std"]))
        A                   B          
     mean       std      mean       std
name                                   
a     0.5  0.707107  0.516503  1.507904
b     2.0  1.732051 -0.730142  0.873904

时间序列

创建一个日期序列:df.date_range(start = None, end = None, periods = None, freq = None, tz = None)

start 定义了开始时间,end 定义了结束时间,periods 定义了时间跨度,freq 定义了频率,tz 定义了时区。

  • 定义了 startend,系统会自动判断频率:
>>> print(pd.date_range("1/1/2019", "1/4/2019"))
DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03', '2019-01-04'], dtype='datetime64[ns]', freq='D')
  • 定义了 startendperiods,系统默认频率为日:
>>> print(pd.date_range("1/1/2019", periods = 3))
DatetimeIndex(['2019-01-01', '2019-01-02', '2019-01-03'], dtype='datetime64[ns]', freq='D')
  • 定义了 startendfreq,系统会根据 freq 平均时间跨度,freq可以取倍数:
>>> print(pd.date_range("1/1/2019", "1/31/2019", freq = "10D"))
DatetimeIndex(['2019-01-01', '2019-01-11', '2019-01-21', '2019-01-31'], dtype='datetime64[ns]', freq='10D')
  • 可以定义时区tz,默认为 “UTC”:
>>> print(pd.date_range("1/1/2019", "1/2/2019", tz = 'America/New_York'))
DatetimeIndex(['2019-01-01 00:00:00-05:00', '2019-01-02 00:00:00-05:00'], dtype='datetime64[ns, America/New_York]', freq='D')

完整时区列表可以在 pytz 包里找到。

>>> impost pytz
> print((pytz.all_timezones[:5]))
['Africa/Abidjan', 'Africa/Accra', 'Africa/Addis_Ababa', 'Africa/Algiers', 'Africa/Asmara']

将数据转换成时间:pd.to_datetime(arg, format = None)

arg 是转换的对象,接受整数,浮点,字符串,时间序列,列表,元组,一维数组和序列;format 定义了对象的格式,若未给定则系统会自动判断。

>>> print(pd.to_datetime(["1/1/2019"]))
DatetimeIndex(['2019-01-01'], dtype='datetime64[ns]', freq=None)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值