我正在尝试运行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会自动增加?
感谢
答案 0 :(得分:0)
您可以在每个循环中为从max
索引值创建的新索引值分配append
到csv
更好的使用参数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效率,我建议在每个循环中保持文件打开而不是打开/关闭。