如何使用pandas将新数据帧行附加到csv?

时间:2017-11-01 16:49:01

标签: pandas csv dataframe append

我有一个新的数据框,如何将其附加到现有的csv?

我尝试了以下代码:

f = open('test.csv', 'w')
df.to_csv(f, sep='\t')
f.close()

但它不会向test.csv附加任何内容。 csv很大,我只想使用append,而不是将整个csv作为数据帧读取并将其连接起来并将其写入新的csv。有什么好方法可以解决这个问题吗?感谢。

4 个答案:

答案 0 :(得分:3)

试试这个:

kubectl proxy

答案 1 :(得分:0)

尝试以下代码,它将在本地文件夹中生成一个旧文件(10行)和新文件(2行)。在我追加之后,新内容全部混淆:

import pandas as pd
import os 

dir_path = os.path.dirname(os.path.realpath("__file__"))
print(dir_path)

raw_data = {'HOUR': [4, 9, 12, 7, 3, 15, 2, 16, 3, 21], 
        'LOCATION': ['CA', 'HI', 'CA', 'IN', 'MA', 'OH', 'OH', 'MN', 'NV', 'NJ'], 
        'TYPE': ['OLD', 'OLD', 'OLD', 'OLD', 'OLD', 'OLD', 'OLD', 'OLD', 'OLD', 'OLD'], 
        'PRICE': [4, 24, 31, 2, 3, 25, 94, 57, 62, 70]}
old_file = pd.DataFrame(raw_data, columns = ['HOUR', 'LOCATION', 'TYPE', 'PRICE'])
old_file.to_csv(dir_path+"/old_file.csv",index=False)


raw_data = {'HOUR': [2, 22], 
        'LOCATION': ['CA', 'MN'], 
        'TYPE': ['NEW', 'NEW'], 
        'PRICE': [80, 90]}
new_file = pd.DataFrame(raw_data, columns = ['HOUR', 'LOCATION', 'TYPE', 'PRICE'])
new_file.to_csv(dir_path+"/new_file.csv",index=False)


new_file=dir_path+"/new_file.csv"
df=pd.read_csv(new_file)
df.to_csv('old_file.csv', sep='\t', header=None, mode='a')

它会来:

HOUR    LOCATION    TYPE    PRICE
4   CA  OLD 4
9   HI  OLD 24
12  CA  OLD 31
7   IN  OLD 2
3   MA  OLD 3
15  OH  OLD 25
2   OH  OLD 94
16  MN  OLD 57
3   NV  OLD 62
21  NJ  OLD 70
02CANEW80           
122MNNEW90  

答案 2 :(得分:0)

TL:DR 来自MaxU的答案是正确的。

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

我遇到了同样的问题,希望附加到DataFrame并在循环内保存为CSV。这似乎是一种常见的模式。 我的标准是:

  1. 写回同一文件
  2. 写的数据不要多余。
  3. 在循环期间继续将新数据追加到数据框。
  4. 保存每次迭代(以防长时间运行的循环崩溃)
  5. 不要将索引存储在CSV文件中。

请注意 mode header 的不同值。在完整的写入中,mode ='w'和header = True,但在追加中,mode ='a'和header ='False'。

import pandas as pd

# Create a CSV test file with 3 rows
data = [['tom', 10], ['nick', 15], ['juli', 14]] 
test_df = pd.DataFrame(data, columns = ['Name', 'Age']) 
test_df.to_csv('test.csv', mode='w', header=True, index=False)

# Read CSV into a new frame
df = pd.read_csv('test.csv')
print(df)

# MAIN LOOP
# Create new data in a new DataFrame
for i in range(0, 2):
    newdata = [['jack', i], ['jill', i]] 
    new_df  = pd.DataFrame(newdata, columns = ['Name', 'Age']) 

    # Write the new data to the CSV file in append mode
    new_df.to_csv('test.csv', mode='a', header=False, index=False)
    print('check test.csv')

    # Combine the new data into the frame ready for the next loop.
    test_df = pd.concat([test_df, new_df], ignore_index=True)

# At completion, it shouldn't be necessary, but to write the complete data 
test_df.to_csv('completed.csv', mode='w', header=True, index=False)
# completed.csv and test.csv should be identical.

答案 3 :(得分:0)

要在csv文件中附加熊猫数据框,也可以尝试。

df = pd.DataFrame({'Time':x, 'Value':y})
with open('CSVFileName.csv', 'a+', newline='') as f:
    df.to_csv(f, index=False, encoding='utf-8', mode='a')
    f.close()