提取文件名并将其用作Pandas中DataFrame上的标签

时间:2018-10-19 22:26:32

标签: python python-3.x pandas list dataframe

我要连接在一起的大量.txt文件,但它们本身缺少日期。

但是,日期是文件名,我想以某种方式提取该文件名并用作我的Pandas DataFrames上的标签-例如Apr 2009.txt。这样可以弥补文件本身中缺少实际日期的情况。

有没有办法一次将所有文件一次引入本地,并将文件名作为标签吐出,从而按日期将整个DataFrame的每个部分分开?

我的伪代码是:

file = 'PATH\\FileName.txt'

openfile = open(file,'r')
new_line = []

def separateState(l):
    for line in l:
        if any(x in line for x in ['New York']):     
            new_line.append(line.split())

然后

def joinWords(n):
    for listy in n:
        operation on each list (listy)
    df = pd.DataFrame(appended_data)
    df.to_csv('FileName.csv')

每个文件在嵌套列表中都是一个.txt文件(按城市上面的这些功能解析)。

输入类似于:

[['CityName1', 'number1'.....'number2'....],.......many other lists of similar types]

我要实现的输出是:

Date                       |    City    |   UNIT1  |   UNIT2  |.....
FileName (Apr 2009)        |  CityName1 | number01 | number11 |....
<blank til next file name> |  CityName2 | number02 | number12 |....
.
.
.
.

基本上,我想在每个摄取的开头按FileName分割每个df。

1 个答案:

答案 0 :(得分:1)

我可能会在Python https://docs.python.org/3/library/csv.html中使用标准的csv模块。但是,如果您更喜欢使用熊猫,可以在下面的代码段中进行修改:

import os
import pandas as pd

#get your working directory and target folder that contains all your files
path = os.path.join(os.getcwd(),'folder')

files = [os.path.join(path,i) for i in os.listdir(path) if os.path.isfile(os.path.join(path,i))]

df = pd.DataFrame()

#for every file in folder, read it and append to a empty dataframe with column filename as 'Date'
for file in files:
    _df = pd.read_csv(file)
    _df['Date'] = os.path.split(file)[-1]
    df = df.append(_df)   

我上面使用的示例读取文件夹中的每个文件,检查它是否为有效文件并将其存储在列表中。一旦有了文件列表,我们就将其循环并存储在_df中,并在其中将文件名附加到df中。最后的df将包含所有数据行和文件名。