2017-12-27 464 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次。 –

相关问题