Python 将导入文件的文件名添加到dataframe
对Python来说还是很陌生的,所以请耐心等待。我有一个文件目录,所有文件都有类似的命名方案。文件名如下所示: yob2004.txt yob2005.txt 我试图做的是打开这些文件中的每一个并将其添加到数据帧中。然后我想从文件名中提取年份,并将其作为新列添加到数据框中 我可以得到它的一部分,但不是全部 下面是从文件名中提取年份的代码Python 将导入文件的文件名添加到dataframe,python,pandas,Python,Pandas,对Python来说还是很陌生的,所以请耐心等待。我有一个文件目录,所有文件都有类似的命名方案。文件名如下所示: yob2004.txt yob2005.txt 我试图做的是打开这些文件中的每一个并将其添加到数据帧中。然后我想从文件名中提取年份,并将其作为新列添加到数据框中 我可以得到它的一部分,但不是全部 下面是从文件名中提取年份的代码 filenames = glob.glob('names/*.txt') #split off the beginning of of he file pat
filenames = glob.glob('names/*.txt')
#split off the beginning of of he file path plus 'yob' and only keep
everything after that. ex. 1180.txt
split1 = [i.split('\yob', 1)[1] for i in filenames]
#split of the .txt from the strings in the list above
split2 = [i.split('.', 1)[0] for i in split1]
下面是将所有文件连接在一起的代码
read_files = glob.glob("names/*.txt")
with open("allnames.txt", "wb") as outfile:
for f in read_files:
with open(f, "rb") as infile:
outfile.write(infile.read())
我在想,我实际上需要做的是将第一个文件读入数据框,然后从文件名中提取年份,并将其写入数据框中的一个新列。然后转到下一个文件。冲洗重复一遍
有什么指导吗?这应该适用于您的数据,假设我有两个文件yob2004.txt和yob2005.txt:
#yob2004
1,2,3,4
2,3,4,5
5,6,7,8
#yob2005
8,9,10,11
a,b,c,d
f,j,k
i,j,k,l
我们看到这些文件具有不同的数据类型和不同的行/列数,因此将涵盖大多数边缘情况:
import pandas as pd
from os import walk
f = []
for (dirpath, dirnames, filenames) in walk('/home/dkennetz/yobDf'):
for x in filenames:
if x.startswith('yob'):
f.append(x)
#f = ['yob2005.txt', 'yob2004.txt'] created a list from filenames in directory ^^^
data = pd.DataFrame() # initialize empty df
for filename in f:
df = pd.read_csv(filename, names=['col1', 'col2', 'col3', 'col4']) # read in each csv to df
df['filename'] = filename # add a column with the filename
data = data.append(df) # add all small df's to big df
data['filename'] = data['filename'].map(lambda x: x.lstrip('yob').rstrip('.txt')) # get rid of yob and .txt and just keep year
print(data)
输出:
col1 col2 col3 col4 filename
0 8 9 10 11 2005
1 a b c d 2005
2 f j k NaN 2005
3 i j k l 2005
0 1 2 3 4 2004
1 2 3 4 5 2004
2 5 6 7 8 2004
输出将通过将年份放在列旁边以及dfs大小不同的NAN来判断它来自哪个文件。这应该适用于您的数据,假设我有两个文件yob2004.txt和yob2005.txt:
#yob2004
1,2,3,4
2,3,4,5
5,6,7,8
#yob2005
8,9,10,11
a,b,c,d
f,j,k
i,j,k,l
我们看到这些文件具有不同的数据类型和不同的行/列数,因此将涵盖大多数边缘情况:
import pandas as pd
from os import walk
f = []
for (dirpath, dirnames, filenames) in walk('/home/dkennetz/yobDf'):
for x in filenames:
if x.startswith('yob'):
f.append(x)
#f = ['yob2005.txt', 'yob2004.txt'] created a list from filenames in directory ^^^
data = pd.DataFrame() # initialize empty df
for filename in f:
df = pd.read_csv(filename, names=['col1', 'col2', 'col3', 'col4']) # read in each csv to df
df['filename'] = filename # add a column with the filename
data = data.append(df) # add all small df's to big df
data['filename'] = data['filename'].map(lambda x: x.lstrip('yob').rstrip('.txt')) # get rid of yob and .txt and just keep year
print(data)
输出:
col1 col2 col3 col4 filename
0 8 9 10 11 2005
1 a b c d 2005
2 f j k NaN 2005
3 i j k l 2005
0 1 2 3 4 2004
1 2 3 4 5 2004
2 5 6 7 8 2004
输出将通过将年份放在列旁边和NAN的dfs大小不同的位置来判断它来自哪个文件。文件的内容是什么样的?如果它是多行的,那么您必须将年份添加到与文件内容对应的每一行中。看起来像这样:Mary,F,7065这回答了你的问题吗?文件的内容是什么样的?如果它是多行的,那么您必须将年份添加到与文件内容对应的每一行中。看起来是这样的:玛丽,F,7065这回答了你的问题吗?