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

使用Pandas导入每行不同列数的csv

孟翰海
2023-03-14

使用Pandas或CSV模块将每行具有不同列数的CSV导入Pandas数据框的最佳方法是什么。

"H","BBB","D","Ajxxx Dxxxs"
"R","1","QH","DTR"," "," ","spxxt rixxls, raxxxd","1"

使用此代码:

import pandas as pd
data = pd.read_csv("smallsample.txt",header = None)

生成以下错误

Error tokenizing data. C error: Expected 4 fields in line 2, saw 8

共有3个答案

冯流觞
2023-03-14

P. S.回答的抛光版本如下。它工作。请记住,我们在数据框中插入了许多缺失的值。

### Loop the data lines
with open("smallsample.txt", 'r') as temp_f:
    # get No of columns in each line
    col_count = [ len(l.split(",")) for l in temp_f.readlines() ]

### Generate column names  (names will be 0, 1, 2, ..., maximum columns - 1)
column_names = [i for i in range(0, max(col_count))]

### Read csv
df = pd.read_csv("smallsample.txt", header=None, delimiter=",", names=column_names)
施俊哲
2023-03-14

可以将列名动态生成为简单计数器(0、1、2等)。

动态生成列名

# Input
data_file = "smallsample.txt"

# Delimiter
data_file_delimiter = ','

# The max column count a line in the file could have
largest_column_count = 0

# Loop the data lines
with open(data_file, 'r') as temp_f:
    # Read the lines
    lines = temp_f.readlines()

    for l in lines:
        # Count the column count for the current line
        column_count = len(l.split(data_file_delimiter)) + 1
        
        # Set the new most column count
        largest_column_count = column_count if largest_column_count < column_count else largest_column_count

# Generate column names (will be 0, 1, 2, ..., largest_column_count - 1)
column_names = [i for i in range(0, largest_column_count)]

# Read csv
df = pandas.read_csv(data_file, header=None, delimiter=data_file_delimiter, names=column_names)
# print(df)

缺失的值将被分配到您的CSV行没有值的列。

张姚石
2023-03-14

在read_csv()中提供列名称列表应该可以做到这一点。

例:名称=['a'、'b'、'c'、'd'、'e']

https://github.com/pydata/pandas/issues/2981

编辑:如果你不想提供列名,那么按照尼古拉斯的建议去做

 类似资料:
  • 问题内容: 使用Pandas或CSV模块将每行具有不同列数的CSV导入Pandas DataFrame的最佳方法是什么。 使用此代码: 产生以下错误 问题答案: 在read_csv()中提供列名列表应该可以解决问题。 例如:names = [‘a’,’b’,’c’,’d’,’e’] https://github.com/pydata/pandas/issues/2981 编辑:如果您不想提供列名,

  • 所以我们刚刚进行了一个小的实践考试,要求我们阅读以下格式的输入,作为非图形问题的规则。实际的算法一点也不难做到,但我和我的伙伴们都不知道如何从一开始就扫描这些输入。 前两个整数表示行数(4)和列数。(4) 因此,接下来的四行表示每行的规则(1 2 3表示第2行),接下来的四行表示每列的规则(2 2表示第4列),依此类推。 在学习C语言一个学期后,我们只处理了每行具有相同列数的数组,在这个Java模

  • 我有一个这样的数据框: 看起来像这样: 我的目标是对列和中具有相同值的行进行分组,并以如下方式合并列的内容: 如您所见,列和中具有相同项的行将被合并,而如果至少有一行不同,它们将保持原样。我的想法是使用和函数,如下所示: 但是Python返回错误消息: 你能告诉我我的代码有什么问题吗?为了实现我的目标,我应该写些什么? 注意:我不关心可以丢弃的列会发生什么。

  • 我正在尝试使用GridLayoutManager构建一个RecyclerView,它每行有一个可变的列计数,如下所示: 同一行中所有项目的宽度之和将始终为屏幕宽度。 我试图重新组织项目列表,按行列表分组,然后每行膨胀一个线性布局。它不太好。 所以我被困住了,没有任何想法。任何帮助都将非常感激

  • 有没有办法用熊猫来计算某个值在每一列中出现的次数? 数据= pd。DataFrame({'userID':['Luis ',' Mike ',' Harvey'],' category1':[True,False,True],' category2': [True,True,False],' category3':[False,False,False]}) 假设我想计算每个类别中“真”布尔值的数量

  • 我希望折叠与给定列的值匹配的数据帧行,但必须使用不同的逻辑折叠其余列。例子: 例如,我希望按城市折叠,我希望ColumnA保持最低值,ColumnB保持平均值。结果应该如下所示: 这只是一个例子,在我的实际问题中,我想应用更复杂的逻辑,而不是min()或mean()。 做这件事的正确、干净和最简单的方法是什么?非常感谢。