python - 如何使用python和pandas将多列组合成一个长列
问题描述
大家好,我目前正在处理如下数据: 原始数据文件示例
共有51个文件,每个文件有800多个摆动列,例如(时间,ID,x1,x2,ID,x1,x2,...),这些列都是未标记的。在文件中,每一行都有不同的列数,如下所示:一个数据文件的形状
我需要将所有 51 个文件合并到一个文件中,然后像这样垂直堆叠列: 输出文件示例
因此,对于每个时间戳,每个学生都会有一个特定的行,其中包含他们的位置 x,y。
谁能帮我解决这个问题,谢谢
我使用以下代码来合并具有不同列的 CSV 文件,但输出文件的大小是原始文件的两倍(例如 100MB VS 50MB)。我的方法是使用最大列数组合文件并扩展到每一行。但是,这种方法会在数据中产生大量缺失值,从而增加输出文件的大小。
import os
import glob
import pandas as pd
def concatenate(indir="C:\Test Files",outfile="F:\Research Assitant\PROJECT_Position Data\Test File\Concatenate.csv"):
os.chdir(indir)
fileList=glob.glob("*.csv")
dfList=[]
for filename in fileList:
### Loop over each line
with open(filename, 'r') as f:
### Skip first four lines
for _ in range(4):
next(f)
### Get the numbers of columns in each line
col_count = [ len(l.split(",")) for l in f.readlines() ]
### Read the current csv file
df = pd.read_csv(filename, header=None, delimiter=",", names=range(max(col_count)),
skiprows=4, keep_default_na=False, na_values=[""])
### Append to the list
dfList.append(df)
concatDf=pd.concat(dfList,axis=0)
concatDf.to_csv(outfile,index=None)
有什么办法可以减小输出文件的大小?还是一种更有效的方式来处理 python 中的异构 CSV 文件?
合并所有 CSV 文件后如何垂直堆叠列?
解决方案
with open(os.path.join(working_folder, file_name)) as f:
student_data = []
for line in f:
row = line.strip().split(",")
number_of_results = round(len(row[1:]) / 4) # if we do not count time column, data repeats every 4 times
time_column = row[0]
results = row[1:]
for i in range(number_of_results):
data = [time_column] + results[i*4: (i+1)*4]
student_data.append(data)
df = pd.DataFrame(student_data, columns=["Time", "ID", "Name", "x1", "x2"])
df
推荐阅读
- node.js - 如果在创建反应项目时反应脚本的版本类似于 >3,则会出错
- azure-devops - 如何在 Azure devops 上为 Hybris 设置 CI/CD 管道(SAP 商业云,CCv2)
- python-3.x - 收集计数器()函数
- reactjs - React - 表格行中的输入失去对输入的关注
- php - 如何在 laravel 中通过 Flashed Session 传递 html 标签?下面的代码不起作用
- ffmpeg - 用于编码视频 mpeg2video 但扩展名为 .mov 的 ffmpeg 选项
- c++ - 尝试将 std::copy() 与 std::back_inserter 一起使用以从 std::cin 读取时出现不同的结果
- android - 无法在android中使用对话框
- macos - Electron 应用在 Apple 评测中显示黑屏
- php - Laravel 6 下拉搜索过滤器