python - 如何在 Pandas 数据框中将其分开?

标签 python pandas dataframe

我的初始结果(记住这是一个示例,所以我需要直接在 DataFrame 中进行分隔 - 无法手动进行 - 因为它来自 pdf 并且表格只能以这种方式读取):

enter image description here

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)

我的预期结果:

enter image description here

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 在我们扩展它之后将其返回。 popdf 中删除该列,因此我们可以将剩余的内容与 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/

相关文章:

python - Pandas 将数据子集应用到新数据框

python - 数据帧Python中列的嵌套循环

Python、Pandas 从数据框创建新数据

python - 使用带有 np.array 值的字典列表创建 DataFrame

python - 在python中的字符串列表中用数字分隔值

python - Django 使用包含过滤多对多

python - pandas 数据框中的新列基于带有条件列表的现有列值

python - Flask + MySQL 奇怪的行为

python - 使用逗号和小数打印大数字的区域设置感知方法

pandas - 在数据框中对日期值进行排序不起作用