将包含列表列表的Python Dict转换为数据帧

2024-06-16 11:30:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下代码:

names = ['Tom', 'Dick', 'Harry']
marriageDates = ['02-02-1958', '08-07-1969', ['01-21-1973','07-14-1981']]
people = {
    "Name": names,
    "Marriage Date(s)": marriageDates
}
df = pd.DataFrame(people)
print(df)

其中:

    Name             Marriage Date(s)
0    Tom                02-02-1958
1   Dick                08-07-1969
2  Harry  [01-21-1973, 07-14-1981]

但是,我希望输出为:

    Name 1st Marriage Date 2nd Marriage Date
0    Tom        02-02-1958                  
1   Dick        08-07-1969                  
2  Harry        01-21-1973        07-14-1981

换句话说,我的dict中的一个关键是列表列表。我希望将该列表的第n个元素放置在新的相邻列中(如第二个表中),而不是将该键填充一个条目为列表的列(如第一个表中的最后一行)。有什么办法可以这样做吗


Tags: 代码namedataframedf列表datenamespeople
2条回答

你可以试试这个:-

import pandas as pd
ordinal = lambda n: "%d%s" % (n,"tsnrhtdd"[(n/10%10!=1)*(n%10<4)*n%10::4])
names = ['Tom', 'Dick', 'Harry']
marriageDates = ['02-02-1958', '08-07-1969', ['01-21-1973','07-14-1981']]
people = {
    "Name": names,
    "Marriage Date(s)": marriageDates
}
df = pd.DataFrame(people)
marriage_date_df = df['Marriage Date(s)'].apply(pd.Series)
marriage_date_df = marriage_date_df.rename(columns = lambda x :  ordinal(x+1)+' Marriage Date')
result_df = pd.concat([df[["Name"]], marriage_date_df[:]], axis=1)
result_df

它给出了输出:-

    Name    1st Marriage Date   2nd Marriage Date
0   Tom     02-02-1958          NaN
1   Dick    08-07-1969          NaN
2   Harry   01-21-1973          07-14-1981

希望这有帮助

有一种非常简单的方法可以做到这一点。我最近也发现了

df2 = df['Marriage Date(s)'].apply(pd.Series)
pd.concat([df[['Name']], df2], axis=1).rename(columns={0:'1st Marriage Date',1:'2st Marriage Date'})

    Name    1st Marriage Date   2st Marriage Date
0   Tom     02-02-1958  NaN
1   Dick    08-07-1969  NaN
2   Harry   01-21-1973  07-14-1981

相关问题 更多 >