Python数据帧到csv索引错误

时间:2017-02-02 06:46:58

标签: python csv pandas dataframe

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

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

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会自动增加?

感谢

3 个答案:

答案 0 :(得分:0)

您可以在每个循环中为从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)

答案 1 :(得分:0)

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

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

此外,您可以更改函数范围()中的参数,以便Id列的初始数量可以是您想要的任何数字。

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

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

答案 2 :(得分:0)

您只需使用计数器并使用"索引"设置索引。循环中DataFrame的属性:

    <EditText
        android:id="@+id/etZipCode"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:layout_weight="1"
        android:imeOptions="actionNext"
        android:inputType="text"
        android:maxLength="8"
        android:text="3445"
        android:padding="15dp"
        android:singleLine="true"/>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="10dp"
        android:layout_marginLeft="5dp"
        android:layout_weight="1"
        android:drawableRight="@drawable/ic_dropdown_pin"
        android:minHeight="50dp"
        android:padding="15dp"
        android:text="Alaska Standard Time"
        android:ellipsize="end"
        android:maxLines="1"
        android:drawablePadding="10dp"
        android:singleLine="true"/>

</LinearLayout>

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