【问题标题】:Python dataframe to csv index errorPython数据框到csv索引错误
【发布时间】:2017-02-02 06:46:57
【问题描述】:

我正在尝试运行 python 代码将数据从一个 csv 加载到另一个。我正在使用 pandas 将数据从 feed csv 加载到数据框,然后将该数据框附加到最终的 csv

挑战在于此过程将每 1 分钟重复一次,并将附加到现有的 csv。我不是 python 专家,我的代码充其量是不确定的。但它就在这里。

import pandas as pd
import csv
import datetime
import time

while True:
  df = pd.read_csv('Feed.csv')
  df['timestamp'] = dt.datetime.now()

  f = open('Final.csv', 'a')
  df.to_csv(f, header = False)
  f.close()
time.sleep(60)

挑战在于 Final.csv 有一个 id 列,该列正在输入索引。每次代码运行时,索引又从 0 开始。我每次还要把final.csv加载到mysql表中,id作为pk。每次我将它加载到 Final.csv 时,是否有自动增加 id?

谢谢

【问题讨论】:

  • 你能显示索引是什么吗?该问题没有足够的信息来回答

标签: python csv pandas dataframe


【解决方案1】:

您可以在每个循环中分配使用以前的max 索引值创建的新索引值,因为appendcsv 更好地使用参数mode='a'

last_idx = 0
while True:
    df = pd.read_csv('Feed.csv')
    df.index = np.arange(last_idx, df.index.max() + last_idx + 1)
    last_idx = df.index.max() + 1
    #print (df)

    df.to_csv('Final.csv', mode='a', header=None)

【讨论】:

    【解决方案2】:

    您可以在程序中添加一段代码来重写您的数据框,如下所示。

    df = pd.DataFrame({'Id':range(1,len(df)+1), 'Name':df['Name'], 'Age':df['Age'], 'Salary':df['salary']})
    

    另外,您可以更改函数 range() 中的参数,以便 Id 列的初始编号可以是您想要的任何数字。

    记住在使用 to_csv() 函数时,将另一个参数设置为 False,如下所示:

    df.to_csv(f, header = False, index = False)
    

    【讨论】:

      【解决方案3】:

      您可以简单地使用计数器并在循环中使用 DataFrame 的“索引”属性设置索引:

      import pandas as pd
      import csv
      import datetime
      import time
      
      count = 0
      while True:
          df = pd.read_csv('Feed.csv')
          df['timestamp'] = dt.datetime.now()
      
          df.index=range(count, count+len(df))
          count += len(df)
          f = open('Final.csv', 'a')
          df.to_csv(f, header = False)
          f.close()
          time.sleep(60) # I assume you're missing an indent here?
      

      顺便说一句,为了更高效的 I/O,我建议保持文件打开而不是在每个循环中打开/关闭。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-02-04
        • 2017-12-14
        • 2017-09-28
        • 1970-01-01
        • 2019-04-08
        • 2019-04-05
        • 2018-07-13
        • 1970-01-01
        相关资源
        最近更新 更多