创建每行具有元组但缺少列的熊猫数据框

艾琳

我有一个输出类似的元组的操作[('a',1.0), ('c', 2.5)]它为大量输入执行此操作,因此输出看起来像

[('a',1.0), ('c', 2.5)]
[('b',1.5), ('c', 2.5)]
[('a', 5.0), ('b',1.5), ('c', 2.75)]

它应该输出一个看起来像

>>> df
     a     b     c
0    1.0   NaN   2.5
1    NaN   1.5   2.5
2    5.0   1.5   2.75

但是,列名是事先未知的,因此在某些时候数据生成,我可能会以some结尾('z',12.0)

我认为最简单的方法是为每一行创建一个数据框并连接这些数据框:

df_list = []
for row in rows:
     tuple_result = f(row)
     df_list.append(pd.DataFrame(...)) # generate a single-row dataframe
df = pd.concat(df_list, axis=0, ignore_index=True)

这将照顾所有的NaN和列名。但是,我将在多行中执行此操作,并且我认为这种方法将不必要地占用大量内存。

有一个更好的方法吗?

亚力山大

您可以使用列表推导,将每行的元组转换为字典。

my_data = [
    [('a',1.0), ('c', 2.5)],
    [('b',1.5), ('c', 2.5)],
    [('a', 5.0), ('b',1.5), ('c', 2.75)]
]

>>> pd.DataFrame([dict(row) for row in my_data])
     a    b     c
0  1.0  NaN  2.50
1  NaN  1.5  2.50
2  5.0  1.5  2.75

时机

%timeit pd.DataFrame([dict(row) for row in my_data * 100000])
# 559 ms ± 92 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

%timeit pd.DataFrame(map(dict, my_data * 100000))
# 438 ms ± 25.8 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

%%timeit
df_list = []
for row in my_data * 100000:
     df_list.append(pd.DataFrame(dict(row), index=[0])) 
df = pd.concat(df_list, axis=0, ignore_index=True, sort=False)
# 6min 11s ± 1min 54s per loop (mean ± std. dev. of 7 runs, 1 loop each)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

创建具有多个数据框的熊猫数据框

从熊猫元组字典创建数据框

从元组列表创建熊猫数据框

如果缺少列值,则用增量值替换为熊猫数据框

每行大熊猫数据框中的前k列具有值

创建具有重复值的熊猫数据框

使用缺少列数据的列表创建 DataFrame

元组的熊猫数据框?

熊猫数据框。将元组值扩展为具有多索引的列

熊猫将数据框转换为具有某些特殊要求的元组数组

从不使用case类的元组序列创建具有数据框的数据集

从其他具有相似索引的数据框的列创建一个熊猫数据框

从嵌套列表的元组列表创建熊猫数据框

熊猫数据框基于元组列表创建新列

熊猫通过每行具有列名称和索引的单元格值来重塑数据框

如果数据框中缺少列的添加列的整洁方法

具有附加“层”的熊猫数据框

具有独特熊猫的数据框

合并具有不同数据类型的列以在熊猫数据框中创建单个dateTime列

创建熊猫数据框,其中每个元素都是从其他数据框创建的元组

熊猫分组后缺少列

如何基于在熊猫数据框中具有NaN的现有列创建新列?

返回具有列值或缺少列的行

乘以上面的单元格即可创建具有公式的熊猫数据框

如何从两个具有相同键值的字典创建熊猫数据框?

从具有多个非常规分隔符的文件创建熊猫数据框

无法创建具有特定数量的类标签的熊猫数据框

在熊猫中创建具有递归操作的条件数据框列

从具有多个日期/价格列的数据框中以大熊猫创建面板