如何在循环中将不同大小的列表附加到空熊猫数据框的每一列?
Posted
技术标签:
【中文标题】如何在循环中将不同大小的列表附加到空熊猫数据框的每一列?【英文标题】:How to append to each column of empty pandas data frame different size of lists in a loop? 【发布时间】:2022-01-20 08:42:32 【问题描述】:嗨,伙计们,这越来越令人沮丧。!经过长时间的在线浏览。我在这里找不到可以提供帮助的单一来源。如何将不同大小的列表附加到空熊猫数据框的每一列?例如,我有这三个变量:
var1 = ['BBCL15', 'KL12TT', 'TMAA03', '1523FR']
var2 = [253, 452, 16]
var3 = ['23n2', 'akg_9', '12.3bl', '30x2', 'dd91']
我想在循环中将它附加到空的熊猫数据框中:
df = pd.DataFrame(columns=['col1', 'col2', 'col3'])
# something like this.
for x in var1:
df['col1'].append(pd.Series(x), ignore_index=True)
for x in var2:
df['col2'].append(pd.Series(x), ignore_index=True)
for x in var3:
df['col3'].append(pd.Series(x), ignore_index=True)
每个变量对应一个列,用NaN填充空格,因为变量的长度不一样。 有人可以帮忙吗?
【问题讨论】:
df = pd.concat([pd.DataFrame(x, columns=[f'coli']) for i, x in enumerate([var1, var2, var3], 1)], axis=1)
...?
谢谢!这对我有用!
【参考方案1】:
>>> cols = ['col1', 'col2', 'col3']
>>> df = pd.DataFrame(columns=cols)
>>> max_len = max([len(var1), len(var2), len(var3)])
>>> for col, var in zip(cols, [var1, var2, var3]):
... df[col] = var+([None]*(max_len - len(var)))
>>> df
col1 col2 col3
0 BBCL15 253.0 23n2
1 KL12TT 452.0 akg_9
2 TMAA03 16.0 12.3bl
3 1523FR NaN 30x2
4 None NaN dd91
【讨论】:
谢谢你!你是明星!亲切的问候 有趣的是,我们如何为如此简单的任务做完全相同的事情,但我们的代码看起来完全不同:-D 你说得对,我们可以通过多种方式做同样的事情,但每种实现方式各有利弊。 检查你的python和包版本 我已经在Python=3.8.10
和 pandas=1.3.4
上测试过【参考方案2】:
创建一个列表列表以使用列表理解:
lists = [var1, var2, var3]
获取最长列表的长度:
longest_length = max([len(v) for v in lists])
根据需要填充列表:
padded_lists = [v + [float("NaN")]*(longest_length - len(v)) for v in lists]
创建数据框:
pd.DataFrame(padded_lists).T
【讨论】:
【参考方案3】:这是另一个使用pd.concat
的解决方案:
var1 = ['BBCL15', 'KL12TT', 'TMAA03', '1523FR']
var2 = [253, 452, 16]
var3 = ['23n2', 'akg_9', '12.3bl', '30x2', 'dd91']
df = pd.DataFrame()
for i in [var1, var2, var3] :
df = pd.concat([df, pd.Series(i)], axis = 1, ignore_index = True)
df.columns = ['col1', 'col2', 'col3']
注意:使用此解决方案时,请避免首先命名数据框列。
【讨论】:
【参考方案4】:另外,这是一个实用的解决方案!
mydict = 'col1': var1, 'col2': var2, 'col3': var3
df = pd.DataFrame(key:pd.Series(value) for key, value in mydict.items())
df
col1 col2 col3
0 BBCL15 253.0 23n2
1 KL12TT 452.0 akg_9
2 TMAA03 16.0 12.3bl
3 1523FR NaN 30x2
4 NaN NaN dd91
【讨论】:
以上是关于如何在循环中将不同大小的列表附加到空熊猫数据框的每一列?的主要内容,如果未能解决你的问题,请参考以下文章