这是我的第一个问题,对于任何格式错误或解释错误,我深表歉意。
我正在尝试重组一个数据框。
现在,我有一个数据框(df),其中每一行的内容通过其5列进行分配。每个单元格的内容有7种可能性:document_type,性别,国籍,issuing_date,expire_expiry,issuing_country和None。这是一个例子:
df = pd.DataFrame(
[["'gender': 'Female'", "'nationality': 'ESP'", "'document_type': 'national_identity_card'", "'date_of_expiry': '2025-11-06'", "'issuing_country': 'ESP'"],
["'gender': 'Male'", "'issuing_date': '2015-05'", "'document_type': 'passport'", "'issuing_country': 'FRA'", None],
["'document_type': 'national_identity_card'", "'issuing_country': 'GRC'", None, None, None]],
index=[0,1,2],
columns=['column1', 'column2', 'column3', 'column4', 'column5'])
In[1]:df
Out[1]:
column1 column2 column3 column4 column5
0 'gender': 'Female' 'nationality': 'ESP' 'document_type': 'national_identity_card' 'date_of_expiry': '2025-11-06' 'issuing_country': 'ESP'
1 'gender': 'Male' 'issuing_date': '2015-05' 'document_type': 'passport' 'issuing_country': 'FRA' None
2 'document_type': 'national_identity_card' 'issuing_country': 'GRC' None None None
我想安排这张桌子,这样我可以计算男女人数,不同国籍等等。
我创建了一个数据框(df2),其中有6列(document_type,性别,国籍,issuing_date,date_of_expiry和issuing_country),我希望将每一行的内容组织到正确的单元格中,即在“性别”列中有“男”或“女”,其他人也一样。
df2 = pd.DataFrame(index=[0,1,2], columns=['document_type', 'gender', 'nationality', 'issuing_date', 'date_of_expiry', 'issuing_country'])
In[2]:df2
Out[2]: df2
document_type gender nationality issuing_date date_of_expiry issuing_country
0 NaN NaN NaN NaN NaN NaN
1 NaN NaN NaN NaN NaN NaN
2 NaN NaN NaN NaN NaN NaN
我想为df2获得以下内容:
document_type gender nationality issuing_date date_of_expiry issuing_country
0 national_identity_card Female ESP None 2025-11-06 ESP
1 passport Male None 2015-05 None FRA
2 national_identity_card None None None None GRC
某一行中的内容应保留在同一行中。
我考虑过迭代原始数据帧(df),验证对于每一行和每一列,该单元格是否在列表中包含任何字符串(如中所示lst = ['document_type', 'gender', 'nationality', 'issuing_date', 'date_of_expiry', 'issuing_country']
),如果是,则将其排序到正确的列中。
但是,我对python还是很陌生,不知道该怎么做。我一直在尝试什至无法解决这个问题。
任何帮助表示赞赏。谢谢。
这是由于数据结构损坏导致的,因此我们需要首先解决该问题,看起来dict
每个单元格都有一个问题,因此我们使用methodast
import ast
yourdf=('{'+df.stack()+'}').apply(ast.literal_eval).apply(pd.Series).fillna('').sum(level=0)
yourdf
Out[19]:
gender nationality ... issuing_country issuing_date
0 Female ESP ... ESP
1 Male ... FRA 2015-05
2 ... GRC
[3 rows x 6 columns]
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句