【发布时间】:2022-07-20 22:48:25
【问题描述】:
我有一个数据框(在 csv 文件中),其中有两列,每列都包含字符串格式的列表(可变长度)。我提供了指向我存储 csv 文件以供参考的 google 驱动器的链接https://drive.google.com/file/d/1Hdu04JdGpPqG9_k6Mjx_1XNLBvogXfnN/view?usp=sharing 数据框看起来像这样
Opp1 Opp2
0 ['KingdomofPoland','GrandDuchyofLithuania'] ['Georgia']
1 ['NorthernYuanDynasty'] ['Georgia']
2 ['SpanishEmpire','CaptaincyGeneralofChile'] ['ChechenRepublic']
... ... ...
3409 ['Turkey','SyrianOpposition'] ['CatholicLeague','SpanishEmpire']
3410 ['Egypt','UnitedArabEmirates'] ['SpanishEmpire']
3411 ['Turkey','SyrianOpposition'] ['SpanishEmpire']
3412 ['UnitedStates','UnitedKingdom','SaudiArabia'] ['SpanishEmpire']
3413 ['Turkey'] ['Russia']
3414 rows × 2 columns
列的值是字符串,当我这样做时我发现了
Input - df['Opp1'][0][0]
Out - '['
输出为“[”。相反,输出应该是第一行列表的第一个元素,即“KingdomofPoland”。
解决此问题后,我想通过组合 Opp1 和 Opp2 列的每一行中的列表元素来创建一个新列。 Opp1 列中每一行的元素是与 Opp2 列中同一行的相应国家/帝国发生战争的国家和帝国的名称。 所以基本上是一个带有行条目的新列
new_col
0 ['KingdomofPoland', 'Georgia']
0 ['GrandDuchyofLithuania', 'Georgia']
1 ['NorthernYuanDynasty', 'Georgia']
2 ['SpanishEmpire', 'ChechenRepublic']
2 ['CaptaincyGeneralofChile', 'ChechenRepublic']
... ... ...
3409 ['Turkey', 'CatholicLeague']
3409 ['Turkey', 'SpanishEmpire']
3409 ['SyrianOpposition', 'CatholicLeague]
3409 ['SyrianOpposition', 'SpanishEmpire']
3410 ['Egypt','SpanishEmpire']
3410 ['UnitedArabEmirates','SpanishEmpire']
3411 ['Turkey', 'SpanishEmpire']
3411 ['SyrianOpposition', 'SpanishEmpire']
.................
这实质上将引入新行,因为我们有点爆炸 Opp1 和 Opp2 列同时迭代行元素。
最终目标是获得参与特定战争的国家的边缘列表,由原始 Opp1(opposition 1) 和 Opp2(opposition2) 列表示。 Opp1 行列表中的每个实体(国家)应附加到 Opp2 行列表的每个实体(国家)。最终的数据集将在 Gephi 上用作边缘列表。
我是使用 python 进行数据分析的初学者。到目前为止,我一直在手动清理我的数据集,这已经消耗了十几个宝贵的时间。谁能帮我解决这个问题。
注意 - 在 Opp1 和 Opp2 列的每一行中都有多个相似的条目,因为同一国家在不同年份多次打仗。
【问题讨论】:
-
您介意展示您的 df 数据类型吗?
-
@INGl0R1AM0R1 我已经添加了图片,在底部你可以看到 df dtypes
-
@Nick_Z0 在 Opp1 和 Opp2 两列中的任何一个上使用 .explode 什么都不做。正如我在问题中解释的那样,每列的行条目不是列表,而是格式化为列表的字符串。当我查询 Opp1 列第一行的第一个元素时,它不返回元素名称,而是返回 '[' 作为输出。所以我相信这就是为什么 explode() 不起作用。