我的初始结果(记住这是一个示例,所以我需要直接在 DataFrame 中进行分隔 - 无法手动进行 - 因为它来自 pdf 并且表格只能以这种方式读取):
d = {'Year': ['NaN', '2018', '2019', '2020', '2021'],
'Month': [['Jan', 'Feb', 'Mar'], [1, 4, 5], [2, 2, 6], [5, 3, 7], [2]]}
df = pd.DataFrame(d)
我的预期结果:
d2 = {'Year': ['2018', '2019', '2020', '2021'],
'Jan': [1, 2, 5, 2],
'Feb': [4, 2, 3, 'NaN'],
'Mar': [5, 6, 7, 'NaN']}
df2 = pd.DataFrame(d2)
最佳答案
为了使 dtypes 都是正确的,从头开始重建 DataFrame。您可以通过调用发送 tolist
的系列上的普通构造函数来执行此操作。然后我们修复索引并分配年份列,该列在索引上
l = df['Month'].tolist()
df2 = (pd.DataFrame(l[1:], columns=l[0], index=df.index[1:])
.assign(Year=df['Year']))
print(df2)
# Jan Feb Mar Year
#1 1 4.0 5.0 2018
#2 2 2.0 6.0 2019
#3 5 3.0 7.0 2020
#4 2 NaN NaN 2021
df2.dtypes
#Jan int64
#Feb float64
#Mar float64
#Year object # Because it was object to begin wtih
如果您的原始 DataFrame 中有许多其他列,而不是全部分配它们,您可以 pop
'Month'
列,然后 concat
在我们扩展它之后将其返回。 pop
从 df
中删除该列,因此我们可以将剩余的内容与 df
中的内容连接起来。
l = df.pop('Month').tolist()
df2 = pd.concat([df.iloc[1:], pd.DataFrame(l[1:], columns=l[0], index=df.index[1:])],
axis=1)
# Year Jan Feb Mar
#1 2018 1 4.0 5.0
#2 2019 2 2.0 6.0
#3 2020 5 3.0 7.0
#4 2021 2 NaN NaN
关于python - 如何在 Pandas 数据框中将其分开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68135094/