当前位置: 首页 > 知识库问答 >
问题:

使用熊猫处理可变数量的列-Python

丁立果
2023-03-14

我有一个看起来像这样的数据集(最多5列-但可以更少)

1,2,3
1,2,3,4
1,2,3,4,5
1,2
1,2,3,4
....

我试图使用pandas read_表将其读入一个5列数据帧。我想在没有额外按摩的情况下阅读这篇文章。

如果我尝试

import pandas as pd
my_cols=['A','B','C','D','E']
my_df=pd.read_table(path,sep=',',header=None,names=my_cols)

我得到一个错误-“列名有5个字段,数据有3个字段”。

有没有办法让熊猫在读取数据的同时为缺失的列填写NaN?

共有3个答案

益源
2023-03-14

好的。不确定这有多有效——但这是我所做的。很想听听是否有更好的方法来做到这一点。谢谢!

from pandas import DataFrame

list_of_dicts=[]
labels=['A','B','C','D','E']
for line in file:
    line=line.rstrip('\n')
    list_of_dicts.append(dict(zip(labels,line.split(','))))
frame=DataFrame(list_of_dicts)
葛意远
2023-03-14

我也很想知道这是否可能,从医生那里看似乎不是这样。您可能需要做的是逐行读取文件,并将每次读取连接到DataFrame:

import pandas as pd

df = pd.DataFrame()

with open(filepath, 'r') as f:
    for line in f:
        df = pd.concat( [df, pd.DataFrame([tuple(line.strip().split(','))])], ignore_index=True )

我想,它能起作用,但不是以最优雅的方式。。。

邵耀
2023-03-14

一种似乎有效的方法(至少在0.10.1和0.11.0.dev-fc8de6d中):

>>> !cat ragged.csv
1,2,3
1,2,3,4
1,2,3,4,5
1,2
1,2,3,4
>>> my_cols = ["A", "B", "C", "D", "E"]
>>> pd.read_csv("ragged.csv", names=my_cols, engine='python')
   A  B   C   D   E
0  1  2   3 NaN NaN
1  1  2   3   4 NaN
2  1  2   3   4   5
3  1  2 NaN NaN NaN
4  1  2   3   4 NaN

不过,请注意,这种方法需要为所需的列命名。不像其他一些方法那样通用,但在应用时效果足够好。

 类似资料:
  • 问题内容: 使用Python中的sqlite3,如果我想使用变量而不是固定命令进行数据库查询,我可以执行以下操作: 当我尝试使用pandas数据框访问SQL db时,我可以这样做: 但是我不确定如何在引用变量的同时将数据从SQL加载到pandas数据帧。我尝试了以下方法: 运行此命令时,我收到一条错误消息:“提供的绑定数不正确,当前语句使用1,并且提供了0” 如何使用变量引用正确格式化命令以将SQ

  • 我目前拥有以下数据帧: 当前: 我想旋转桌子,得到以下结果: 预期的: 问题: 如何透视数据帧以获得此输出? 我尝试过的事情: 如何在Pandas中透视数据帧?[重复] 重塑和透视表 使DataFrame.pivot索引参数真正成为可选参数 熊猫中的重塑-枢轴、枢轴表、堆栈和取消堆栈用图片解释

  • 该项目使用了侦测类积木 陀螺仪传感器(1)感受到摇晃? 当陀螺仪检测到震动时,(摇晃或拍击桌面均能使得放在桌上的陀螺仪检测到震动)该输出结果为 True,否则为 False。 在本项目中我们将使用变量来使得小熊猫感知陀螺仪的震动次数。需要使用「陀螺仪」模块。 为陀螺仪编程 1. 选择变量类积木,点击“新建变量”,并将新变量命名为“震动次数” 2. 将事件类积木 当绿色旗帜被点击 拖到脚本区,再添加

  • 我想知道它到底是什么意思?我需要改变什么吗? 如果坚持使用,应如何挂起警告?

  • 问题内容: 我有一个包含13个不同列名的数据框,我将这些标题分为两个列表。我现在想对每个列表执行不同的操作。 是否可以将列名作为变量传递给pandas?目前,我的代码可以在列表中循环,但是我在尝试将列名传递给函数时遇到了麻烦 码 问题答案: 我认为您可以使用创建自 : 也许更好,因为是,这是由创建:

  • 在处理扫描仪输入时,我们可以使用var。。带sc.nextInt()的参数??例如(以下代码) 输出是ArrayIndexOutOfBoundsException: 1任何人都可以解释这一点...