创建一个包含 50 列且仅填充 5 个特定列的空数据框

Creating an empty dataframe with 50 columns with only 5 specific columns filled

我有一个 pandas 数据框 A,它有 5 列和几十万行。我需要的是创建一个数据框 B,它有 50 列,其中 45 列为空,另外 5 列填充了我在数据框 A 中的数据。

我需要这种格式的原因是因为我想最终转换为带有 (,) 分隔符且大部分列为空的 csv 文件。

我的数据框 A 如下所示:

id order first last type
1 111 Johnny Depp type1
2 222 Amber Heard type2

我的 Dataframe B 应该看起来像这样,最后有更多空列:

x order first last x x x x x x x type x x x x
empty 111 Johnny Depp empty empty empty empty empty empty empty type1 empty empty empty empty
empty 222 Amber Heard empty empty empty empty empty empty empty type2 empty empty empty empty

如您所见,我需要为 type 列指定列的位置。这是因为我最终想用函数转换为 CSV to_csv(delimiter=',') 最终看起来像这样:

,111,Johnny,Depp,,,,,,,,,type1,,,,,
,222,Amber,Heard,,,,,,,,,type2,,,,,

好的,所以我假设数据框 B 的前 5 列已经填满了您需要的数据。

然后您可以循环添加任意数量的空白列:

i=4 # However many columns the df started with

while i < 50: # or however many blank columns you want to add
    df[f'column_{i}'] = ''
    i+=1
import pandas as pd

a = pd.DataFrame({"id": [1, 2], "order": [111, 222], "first": ["Johnny", "Amber"], "last": ["Depp", "Heard"], "type": ["type1", "type2"]})
push = ["x", "order", "first", "last"] + list("x" * 7) + ["type"] + list("x" * 4)
cols = [f"x{num}" if value == "x" else value for num, value in enumerate(push)]
b = pd.DataFrame({col: a[col] if col in a.columns.to_list() else None for col in cols})
print(b)

似乎是一个相当随意的问题,但我认为这可以解决您的特定要求。随意更改 "x" * 7 值以反映您的意愿。如果你 import numpy as np,你也可以用 np.nan 替换 None。或者您可以将 None 替换为 "" 以插入空字符串。你的问题说“空”有点含糊。

输出:

     x0  order   first   last    x4    x5    x6    x7    x8    x9   x10   type   x12   x13   x14   x15
0  None    111  Johnny   Depp  None  None  None  None  None  None  None  type1  None  None  None  None
1  None    222   Amber  Heard  None  None  None  None  None  None  None  type2  None  None  None  None