【问题标题】:How to pass each row of a dataFrame to an array如何将数据帧的每一行传递给数组
【发布时间】:2021-06-05 16:10:06
【问题描述】:

如何在字段数组中添加数据框行 就像我有我的数据框一样。

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,
   }
}

我该怎么做?

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    你可以这样做:

    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 指出的那样,像这样定义aa = df.to_dict('index') 也可以,但不确定哪个计算效率更高

    【讨论】:

    【解决方案2】:

    您可以尝试使用df.to_dictorient 作为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】:

      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}}]
      

      【讨论】:

        【解决方案4】:

        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}}]
        

        【讨论】:

        • 我猜在下一个版本中将弃用短格式。可能要提及它,因为在较新版本中它可能会引发Exception,最新版本会引发FutureWarning。在旧版本中像魅力一样工作。
        • 感谢 BENY,但正如 Ch3steR 所说,不推荐使用 'r' 参数。所以我将 'r' 更改为 'records' 并且效果很好。谢谢
        猜你喜欢
        • 2021-05-10
        • 2023-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-18
        • 2020-06-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多