2017-12-27 14 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

これは正確にカウントダウンを行いますが、すべてをまとめてglobするため、個々のファイルごとにこれを実行しません。すべてのファイルを1つのデータフレームにまとめ、1回カウントダウンします。私は各ファイルのカウントダウンをしたいと思っています。私は20のファイルがある場合、それは20回カウントダウンする必要があります。 –

関連する問題