我要连接在一起的大量.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。
答案 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将包含所有数据行和文件名。