【问题标题】:Extracting filename and using it as label on DataFrame in Pandas提取文件名并将其用作 Pandas 中 DataFrame 的标签
【发布时间】:2019-03-24 20:00:36
【问题描述】:

我有大量 .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。

【问题讨论】:

  • 有没有办法?是的。但是仅使用您提供的信息并且没有minimal reproducible example 很难编写一些代码
  • 在上面添加了我的功能!
  • 仍然有点困惑 - 您能否提供与您的输入相对应的输出(简化)版本,以便我们看到您想要实现的目标?
  • 我已经添加了所需的输出。告诉我!
  • 您是否将数据合并到数据框中只是为了将其保存为 csv?

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


【解决方案1】:

我可能会使用 Python 中的标准 csv 模块,https://docs.python.org/3/library/csv.html。但是如果你更喜欢使用 pandas,下面是一个可以修改的代码 sn-p:

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 将包含所有数据行和文件名。

【讨论】:

    猜你喜欢
    • 2020-09-21
    • 2016-04-22
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 2022-07-06
    • 1970-01-01
    • 2018-11-19
    • 2018-10-27
    相关资源
    最近更新 更多