简体   繁体   English

将 pandas 列拆分为两列

[英]split pandas column into two columns

In this data.frame , I want to split the id_date into two columns id and date .在这个data.frame中,我想将id_date分成两列iddate I checked previous answers and tried to use str.split but none of my trials worked.我检查了以前的答案并尝试使用str.split但我的试验都没有奏效。

在此处输入图像描述

DATA数据

dict = {'id_date': {0: ('A', datetime.date(1972, 2, 28)), 1: ('A', datetime.date(1972, 2, 28)), 2: ('A', datetime.date(1972, 2, 28)), 3: ('A', datetime.date(1972, 12, 18)), 4: ('A', datetime.date(1973, 1, 22)), 5: ('A', datetime.date(1973, 1, 22)), 6: ('A', datetime.date(1973, 1, 22)), 7: ('A', datetime.date(1973, 1, 22)), 8: ('A', datetime.date(1973, 1, 23)), 9: ('A', datetime.date(1973, 1, 23)), 10: ('A', datetime.date(1973, 1, 23))}}

import pandas as pd
import datetime

df = pd.DataFrame.from_dict(dict)

Use the DataFrame constructor:使用DataFrame构造函数:

out = pd.DataFrame(df['id_date'].to_list(), columns=['id', 'date'])

output: output:

   id        date
0   A  1972-02-28
1   A  1972-02-28
2   A  1972-02-28
3   A  1972-12-18
4   A  1973-01-22
5   A  1973-01-22
6   A  1973-01-22
7   A  1973-01-22
8   A  1973-01-23
9   A  1973-01-23
10  A  1973-01-23

As new columns:作为新列:

df[['id', 'date']] = pd.DataFrame(df['id_date'].to_list())

output: output:

            id_date id        date
0   (A, 1972-02-28)  A  1972-02-28
1   (A, 1972-02-28)  A  1972-02-28
2   (A, 1972-02-28)  A  1972-02-28
3   (A, 1972-12-18)  A  1972-12-18
4   (A, 1973-01-22)  A  1973-01-22
5   (A, 1973-01-22)  A  1973-01-22
6   (A, 1973-01-22)  A  1973-01-22
7   (A, 1973-01-22)  A  1973-01-22
8   (A, 1973-01-23)  A  1973-01-23
9   (A, 1973-01-23)  A  1973-01-23
10  (A, 1973-01-23)  A  1973-01-23

Use:利用:

df['id'] = df['id_date'].str[0]
df['date'] = df['id_date'].str[1]

OUTPUT

            id_date id        date
0   (A, 1972-02-28)  A  1972-02-28
1   (A, 1972-02-28)  A  1972-02-28
2   (A, 1972-02-28)  A  1972-02-28
3   (A, 1972-12-18)  A  1972-12-18
4   (A, 1973-01-22)  A  1973-01-22
5   (A, 1973-01-22)  A  1973-01-22
6   (A, 1973-01-22)  A  1973-01-22
7   (A, 1973-01-22)  A  1973-01-22
8   (A, 1973-01-23)  A  1973-01-23
9   (A, 1973-01-23)  A  1973-01-23
10  (A, 1973-01-23)  A  1973-01-23

You can do this:你可以这样做:

import datetime
import pandas as pd

dict = {'id_date': {0: ('A', datetime.date(1972, 2, 28)), 1: ('A', datetime.date(1972, 2, 28)), 2: ('A', datetime.date(1972, 2, 28)), 3: ('A', datetime.date(1972, 12, 18)), 4: ('A', datetime.date(1973, 1, 22)), 5: ('A', datetime.date(1973, 1, 22)), 6: ('A', datetime.date(1973, 1, 22)), 7: ('A', datetime.date(1973, 1, 22)), 8: ('A', datetime.date(1973, 1, 23)), 9: ('A', datetime.date(1973, 1, 23)), 10: ('A', datetime.date(1973, 1, 23))}}

df = pd.DataFrame.from_dict(dict)

df['id'] = [el[0] for el in df['id_date']]
df['date'] = [el[1] for el in df['id_date']]

print(df)

output: output:

            id_date id        date
0   (A, 1972-02-28)  A  1972-02-28
1   (A, 1972-02-28)  A  1972-02-28
2   (A, 1972-02-28)  A  1972-02-28
3   (A, 1972-12-18)  A  1972-12-18
4   (A, 1973-01-22)  A  1973-01-22
5   (A, 1973-01-22)  A  1973-01-22
6   (A, 1973-01-22)  A  1973-01-22
7   (A, 1973-01-22)  A  1973-01-22
8   (A, 1973-01-23)  A  1973-01-23
9   (A, 1973-01-23)  A  1973-01-23
10  (A, 1973-01-23)  A  1973-01-23

Or use assign, to keep it cleaner.或使用分配,以保持清洁。

df = (pd.DataFrame.from_dict(dict).assign(id=lambda x:x['id_date'].str[0],date =lambda x:x['id_date'].str[1])) df = (pd.DataFrame.from_dict(dict).assign(id=lambda x:x['id_date'].str[0],date =lambda x:x['id_date'].str[1]))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM