如何将数据框的每一行传递到一个数组中

5
如何在字段数组中添加数据帧行 就像我有我的数据帧。
import pandas as pd
inp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}]
df = pd.DataFrame(inp)
print df

输出:

   c1   c2
0  10  100
1  11  110
2  12  120


所以我想要像这样的东西:
{
  "fields": {
        "c1": 10,
        "c2": 100,
   }
},
{
  "fields": {
        "c1": 11,
        "c2": 110,
   }
},
{
  "fields": {
        "c1": 12,
        "c2": 120,
   }
}

我该如何做呢?

4个回答

6

您可以进行以下操作:

a = df.transpose().to_dict()
a
>>> {0: {'c1': 10, 'c2': 100}, 1: {'c1': 11, 'c2': 110}, 2: {'c1': 12, 'c2': 120}}
res = [{'fields': a[i]} for i in a]
res
>>> [{'fields': {'c1': 10, 'c2': 100}}, {'fields': {'c1': 11, 'c2': 110}}, {'fields': {'c1': 12, 'c2': 120}}]

正如@anky所指出的那样,将a = df.to_dict('index')这样定义a也可以起作用,不确定哪种方法更具计算效率。

这个方法将我的日期列更改为时间戳。从2020-01-03到Timestamp('2020-01-03 00:00:00'),我该如何修复它? - Ekane 3
https://dev59.com/BFsW5IYBdhLWcg3w-rMA - user15270287

4
您可以尝试使用 df.to_dict,并将orient设置为records
out = df.to_dict(orient='records')
# [{'c1': 10, 'c2': 100}, {'c1': 11, 'c2': 110}, {'c1': 12, 'c2': 120}]
out = [{'fields': val} for val in out]

[{'fields': {'c1': 10, 'c2': 100}},
 {'fields': {'c1': 11, 'c2': 110}},
 {'fields': {'c1': 12, 'c2': 120}}]

3

尝试使用df.to_dict连锁

d = [{'field' : x} for x in df.to_dict('records')]
Out[167]: 
[{'field': {'c1': 10, 'c2': 100}},
 {'field': {'c1': 11, 'c2': 110}},
 {'field': {'c1': 12, 'c2': 120}}]

我猜在下一个版本中,使用缩写将被弃用。可能需要提到,在更新的版本中,它可能会引发“异常”,最新版本会抛出“FutureWarning”。在旧版本中运行得很好。 - Ch3steR
谢谢BENY,但是像Ch3steR所说的那样,'r'参数已经被弃用了。所以我把'r'改成了'records',现在它完美地工作了。谢谢。 - Ekane 3

1
Pandas内置的方法to_dict()允许将数据框转换为序列化记录列表。您所需的输出需要对这些记录进行转换:
# Get each row as a record
records = df.to_dict(orient='records')
# [{'c1': 10, 'c2': 100}, {'c1': 11, 'c2': 110}, {'c1': 12, 'c2': 120}]

# Transform each row
records = [{'fields':x} for x in records]
# [{'fields': {'c1': 10, 'c2': 100}},
# {'fields': {'c1': 11, 'c2': 110}},
# {'fields': {'c1': 12, 'c2': 120}}]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接