例如,我试图将包含 YYYYMMDD 格式的日期的字段“日期”分割为 3 个单独的字段(“年”、“月”、“日”)。

我有一种方法可以一次为每个值分配一个值,但我认为有一种更有效的方法可以产生所需的结果。

当前解决方案:

df['year'] = df['date'].astype(str).apply(lambda x: x[:4])
df['month'] = df['date'].astype(str).apply(lambda x: x[4:6])
df['day'] = df['date'].astype(str).apply(lambda x: x[6:8])

以下是我尝试简化代码的一个示例:
df['year'], df['month'], df['day'] = df['date'].astype(str).apply(lambda x: [x[:4], x[4:6], x[6:8]])

最佳答案

假设列 date 是字符串( object )dtype:

In [18]: df
Out[18]:
       date
0  20180131
1  20180611
2  20180513

In [19]: df.dtypes
Out[19]:
date    object
dtype: object

解决方案:
In [22]: df[['year','month','day']] = df.date.str.extract(r'(\d{4})(\d{2})(\d{2})').astype(int)

In [23]: df
Out[23]:
       date  year  month  day
0  20180131  2018      1   31
1  20180611  2018      6   11
2  20180513  2018      5   13

In [24]: df.dtypes
Out[24]:
date     object
year      int32
month     int32
day       int32
dtype: object

PS如果date是数字dtype,那么我会选择@ALollz的解决方案......

关于python - 将 Pandas 系列(基于索引)切成多列数据帧,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50805591/

10-12 23:38