2017-12-27 488 views
0

我有一個目錄,我想對其進行更改的全套csv文件。每個csv都有一個包含日期的行,並且我想添加一個從文件長度向下計數到1的列(因此文件中的最後一個最近日期在該列中的值爲1。如何對目錄中的單個文件進行相同的更改?

我曾嘗試以下:

>import os 
>import pandas as pd 

>for f in os.listdir(path): 

> df = pd.read_csv(f) 

> df['Countdown'] = range(len(df), 1, -1) 

這給我的

FileNotFoundError: File b'Data.csv' does not exist

錯誤這是奇怪的,因爲它給出了數據文件所在的目錄的具體名稱,所以它可以清楚地看到該文件,因爲它在錯誤消息中使用它的名稱。

我曾嘗試使用glob以及。

>import glob 

>data_set = glob.glob(path) 

>for f in data_set: 

> df = pd.read_csv(f) 

> df['Countdown'] = range(len(df), 1, -1) 

,因爲它說這不起作用:

ValueError: Length of values does not match length of index

這個錯誤對我來說很有意義,因爲該數據幀的長度不斷增加,因爲我更多的文件添加到它,所以「len個(df)'參數正在改變,並且與索引不匹配。

我相信我所要做的並不是太獨特,我只是無法找到執行此任務的最佳方式。再次,我正在尋找具有單個文件的結果,每個文件都有一個從最早的日期起倒數爲列的長度的列,最近的日期的值爲1.

你的幫助。

+0

'DF [ '新'] = np.arange(LEN(DF),0,-1)'? – MaxU

回答

0

嘗試這種情況:

for f in glob.glob(r'/path/to/dir/*.csv'): 
    df = pd.read_csv(f) 
    df['Countdown'] = np.arange(len(df), 0, -1) 
    # process df... 
+0

這正確地進行倒計時,但因爲它將所有東西放在一起,所以它不會單獨在每個文件上執行此操作。它將所有文件合併成一個數據幀,然後倒計數一次。我期待着它爲每個文件倒計時。如果我有20個文件,它應該倒數20次。 –

相關問題