【问题标题】:How to create a dynamic DataFrame to export multiple data to excel with Pandas?如何使用 Pandas 创建动态 DataFrame 以将多个数据导出到 excel?
【发布时间】:2021-11-07 10:18:20
【问题描述】:

我有一个返回一些值的函数:

def sigInput(audio):
    ...
    ...
    ...
    return [mean, total, power]

data1 = sigInput('sound1.wav')
data2 = sigInput('sound2.wav')
data3 = sigInput('sound3.wav')
data4 = sigInput('sound4.wav')


df = pd.DataFrame({
    'mean': [data1[0], data2[0], data3[0], data4[0]],
    'total': [data1[1], data2[1], data3[1], data4[1]],
    'power': [data1[2], data2[2], data3[2], data4[2]],
    'label': ['data1', 'data2', 'data3', 'data4']
})

df.to_excel('expData.xlsx')

根据上面的代码,根据函数返回的内容,data1、data2、data3和data4将具有三个值。我的目标是我想使用 pandas 将这些数据导出到 excel。

如果我有四个以上的数据,可能是 10 或 20 个数据,那么我必须手动编写 DataFrame

我的问题是,如果pd.DataFrame 有很多数据,如何让内容更加动态?

感谢您的帮助

【问题讨论】:

    标签: python pandas dataframe data-analysis


    【解决方案1】:

    尝试类似:

    data = [sigInput(f'sound{i}.wav') for i in range(1, 5)]
    df = pd.DataFrame(data).assign(label=[f'data{i}' for i in range(1, 5)])
    df.columns = ['mean', 'total', 'power', 'label']
    

    【讨论】:

    • 我试过这段代码,但我得到了这个错误:ValueError: Length mismatch: Expected axis has 4 elements, new values have 3 elements
    • @NgrWisnu 怎么样df = pd.DataFrame(data).set_axis(['mean', 'total', 'power'], axis=1).T.assign(label=[f'data{i}' for i in range(1, 5)])
    • 我遇到另一个错误:ValueError: Length mismatch: Expected axis has 10 elements, new values have 3 elements 是来自 set_axis 的错误吗?
    • @NgrWisnu df = pd.DataFrame(data).T.set_axis(['mean', 'total', 'power', 'label'], axis=1).assign(label=[f'data{i}' for i in range(1, 5)]) 怎么样@
    • ValueError: Length of values (4) does not match length of index (10)
    【解决方案2】:

    您可以创建一个包含标签名称和数据的字典,并在创建数据框时使用它,如下所示:

    data_dict = {"data1":data1,"data2":data2,"data3":data3,"data4":data4,"data5":data5}
    
    df = pd.DataFrame({
        'mean': [x[0] for x in data_dict.values()],
        'total': [x[1] for x in data_dict.values()],
        'power': [x[2] for x in data_dict.values()],
        'label': [x for x in data_dict.keys()]
    })```
    

    【讨论】:

      【解决方案3】:

      编写一个 for 循环来创建该列表列表,然后将其传递到字典中。

      s = [data1,data2,data3]
      for i in range(len(s)):
          d = s[i]
          for j in range(0,4):
              d = d[j]
      

      您可以将最后一个 d 附加到列表中,然后继续传递

      【讨论】:

        猜你喜欢
        • 2021-06-04
        • 2020-08-21
        • 2019-05-05
        • 1970-01-01
        • 2020-09-15
        • 1970-01-01
        • 2014-12-26
        • 2013-04-04
        • 1970-01-01
        相关资源
        最近更新 更多