繁体   English   中英

创建一个新的 dataframe 以包含 Python 中多个 csv 文件的 1 列部分

[英]Creating a new dataframe to contain a section of 1 column from multiple csv files in Python

所以我正在尝试创建一个新的 dataframe,其中包含来自 300+ csv 个文件的一些数据。 每个文件最多包含 200,000 行数据,我只对每个文件中的一列感兴趣(每个文件的同一列)

我正在尝试将这些列组合成 1 dataframe,其中 csv 1 的第 6 列将位于新 dataframe 的第 1 列,csv 2 的第 6 列将位于新 dataframe 的第 2 列,依此类推直到第 315 号 csv 号文件。

我不需要提取所有 200,000 行数据,但我不确定如何从数据的中间部分提取 2,000 行(每个文件的行数范围,因此每个文件的行数完全相同,只要是中间2000)

非常感谢从每个文件中提取 2000 行以填充新的 dataframe 中的不同列的任何帮助。

到目前为止,我已经对数据进行了处理,使其只包含每个文件的相关列。 这将分别显示每个文件列中的所有数据行。 我尝试使用 iloc function 将其减少到 2000 行,但它没有在 output 中显示任何实际数据。

我不确定我现在如何将这些数据提取到 dataframe 中以包含所有列。

import pandas as pd
import os
import glob
import itertools


#glob to get all csv files
path = os.getcwd()
csv_files = glob.glob(os.path.join('filepath/', "*.csv"))

#loop list of csv files
for f in csv_files:
    df = pd.read_csv(f, header=None)
    df.rename(columns={6: 'AE'}, inplace=True)
    new_df = df.filter(['AE'])
    

    
    print('Location:', f)
    print('File Name:', f.split("\\")[-1])
    print('Content:')
    display(new_df)
    print()

根据您的描述,我推断您有许多 csv 格式的不同文件,每个文件至少有 2000 行和 6 列。 您只想从每个文件的第 6 列获取数据,并且只获取每个文件中中间的 2000 条记录,并将所有这些 2000 条记录的块放入一个新的 dataframe 中,其中一列以某种方式标识哪个文件块来自。

您可以像您所做的那样使用 pandas 读取每个文件,然后您需要使用loc ,正如其中一位评论者所说,到 select 您想要保留的 2000 条记录。 如果将这些记录块中的每一个保存在单独的 dataframe 中,则可以使用 pandas concat方法将它们全部连接到新的 dataframe 的不同列中。

这里有一些代码,我希望它们是不言自明的。 我假设您想要第 6 列,即 pandas 中索引为 5 的那一列,因为我们从 0 开始计数。我还使用usecols只保留第 6 列,并且我根据读取文件的顺序。 您需要根据自己选择的列命名来更改此设置。

我通过将起点定义为记录x来选择中间的 2000 条记录,例如, x + 2000 + x = total number of records ,因此x=(total number of records) / 2 - 1000 这可能不是您想要定义中间 2000 条记录的方式,因此您可以更改它。

df_middles是一个列表,我们 append 新文件的中间 2000 条记录中的每个新 dataframe。 我们在最后使用pd.concat将所有列放入一个新的 dataframe。

import os
import glob
import pandas as pd

# glob to get all csv files
path = os.getcwd()
csv_files = glob.glob(os.path.join("filepath/", "*.csv"))

df_middles = []

# loop list of csv files
for idx, f in enumerate(csv_files, 1):
    # only keep the 6th column (index 5)
    df = pd.read_csv(f, header=None, usecols=[5])
    colname = f"column_{idx}"
    df.rename(columns={5: colname}, inplace=True)
    number_of_lines = len(df)
    if number_of_lines < 2000:
        raise IOError(f"Not enough lines in the input file: {f}")
    middle_range_start = int(number_of_lines / 2) - 1000
    middle_range_end = middle_range_start + 1999
    df_middle = df.loc[middle_range_start:middle_range_end].reset_index(drop=True)
    df_middles.append(df_middle)

df_final = pd.concat(df_middles, axis="columns")

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM