Python 使用pandas读取结构混乱的csv文件

Python 使用pandas读取结构混乱的csv文件,python,csv,pandas,import-from-csv,Python,Csv,Pandas,Import From Csv,我在读取csv文件时遇到问题。问题是由于文件的结构造成的。我想把它读入pandas dataframe对象,但有些行比其他行有更多的列。例如,我可能希望大多数数据的格式如下: Col1,Col2,Col3 a,b,c, a,b,c, a,a,b,c, a,b,c,c, a,b,c 是否有一种方法可以逐行读取csv文件,以便创建两个数据帧,一个具有预期的列数,另一个具有需要进一步检查的行数?您可能应该将此过程视为两个阶段:数据清理,然后加载。您可以使用Pyth

我在读取csv文件时遇到问题。问题是由于文件的结构造成的。我想把它读入pandas dataframe对象,但有些行比其他行有更多的列。例如,我可能希望大多数数据的格式如下:

Col1,Col2,Col3   
a,b,c,   
a,b,c,   
a,a,b,c,   
a,b,c,c,   
a,b,c   

是否有一种方法可以逐行读取csv文件,以便创建两个数据帧,一个具有预期的列数,另一个具有需要进一步检查的行数?

您可能应该将此过程视为两个阶段:数据清理,然后加载。您可以使用Python内置的
csv
模块执行清理步骤,逐个检查每一行。除非您只是想丢弃额外的列,否则您将需要这样的东西来处理锯齿线。

您可能应该将其视为一个两阶段的过程:数据清理,然后加载。您可以使用Python内置的
csv
模块执行清理步骤,逐个检查每一行。除非您只是想丢弃额外的列,否则您将需要这样的东西来处理锯齿线。

您可能应该将其视为一个两阶段的过程:数据清理,然后加载。您可以使用Python内置的
csv
模块执行清理步骤,逐个检查每一行。除非您只是想丢弃额外的列,否则您将需要这样的东西来处理锯齿线。

您可能应该将其视为一个两阶段的过程:数据清理,然后加载。您可以使用Python内置的
csv
模块执行清理步骤,逐个检查每一行。除非您只是想丢弃多余的列,否则您需要这样的方法来处理锯齿线。

一种方法——效率低,但效果好——是留出比所需更多的空间:

>>> df = pd.read_csv("knop.csv", names=range(6))
>>> df
      0     1     2    3   4   5
0  Col1  Col2  Col3  NaN NaN NaN
1     a     b     c  NaN NaN NaN
2     a     b     c  NaN NaN NaN
3     a     a     b    c NaN NaN
4     a     b     c    c NaN NaN
5     a     b     c  NaN NaN NaN
>>> df = df.dropna(axis=1,how='all')
>>> df
      0     1     2    3
0  Col1  Col2  Col3  NaN
1     a     b     c  NaN
2     a     b     c  NaN
3     a     a     b    c
4     a     b     c    c
5     a     b     c  NaN
在数据全部放在一个框架中之后,处理和分离它(包括将第一行提升回列名)应该很简单。

一种方法——效率低,但效果好——是留出比所需更多的空间:

>>> df = pd.read_csv("knop.csv", names=range(6))
>>> df
      0     1     2    3   4   5
0  Col1  Col2  Col3  NaN NaN NaN
1     a     b     c  NaN NaN NaN
2     a     b     c  NaN NaN NaN
3     a     a     b    c NaN NaN
4     a     b     c    c NaN NaN
5     a     b     c  NaN NaN NaN
>>> df = df.dropna(axis=1,how='all')
>>> df
      0     1     2    3
0  Col1  Col2  Col3  NaN
1     a     b     c  NaN
2     a     b     c  NaN
3     a     a     b    c
4     a     b     c    c
5     a     b     c  NaN
在数据全部放在一个框架中之后,处理和分离它(包括将第一行提升回列名)应该很简单。

一种方法——效率低,但效果好——是留出比所需更多的空间:

>>> df = pd.read_csv("knop.csv", names=range(6))
>>> df
      0     1     2    3   4   5
0  Col1  Col2  Col3  NaN NaN NaN
1     a     b     c  NaN NaN NaN
2     a     b     c  NaN NaN NaN
3     a     a     b    c NaN NaN
4     a     b     c    c NaN NaN
5     a     b     c  NaN NaN NaN
>>> df = df.dropna(axis=1,how='all')
>>> df
      0     1     2    3
0  Col1  Col2  Col3  NaN
1     a     b     c  NaN
2     a     b     c  NaN
3     a     a     b    c
4     a     b     c    c
5     a     b     c  NaN
在数据全部放在一个框架中之后,处理和分离它(包括将第一行提升回列名)应该很简单。

一种方法——效率低,但效果好——是留出比所需更多的空间:

>>> df = pd.read_csv("knop.csv", names=range(6))
>>> df
      0     1     2    3   4   5
0  Col1  Col2  Col3  NaN NaN NaN
1     a     b     c  NaN NaN NaN
2     a     b     c  NaN NaN NaN
3     a     a     b    c NaN NaN
4     a     b     c    c NaN NaN
5     a     b     c  NaN NaN NaN
>>> df = df.dropna(axis=1,how='all')
>>> df
      0     1     2    3
0  Col1  Col2  Col3  NaN
1     a     b     c  NaN
2     a     b     c  NaN
3     a     a     b    c
4     a     b     c    c
5     a     b     c  NaN

在数据全部放在一个框架中之后,处理和分离它(包括将第一行提升回列名)应该很简单。

DataFrames本质上是表格式的。没有数据帧这样的东西,不同的行有不同的列数。您最终打算如何处理值过多的行?我需要查看哪些值被复制并删除它们。每一行应该有40列,但有些值是重复的,因此这些行会被移动。数据帧本质上是表格式的。没有数据帧这样的东西,不同的行有不同的列数。您最终打算如何处理值过多的行?我需要查看哪些值被复制并删除它们。每一行应该有40列,但有些值是重复的,因此这些行会被移动。数据帧本质上是表格式的。没有数据帧这样的东西,不同的行有不同的列数。您最终打算如何处理值过多的行?我需要查看哪些值被复制并删除它们。每一行应该有40列,但有些值是重复的,因此这些行会被移动。数据帧本质上是表格式的。没有数据帧这样的东西,不同的行有不同的列数。您最终打算如何处理值过多的行?我需要查看哪些值被复制并删除它们。每一行应该有40列,但有些值是重复的,因此这些行被转移了。谢谢。这是我开始使用的方法。@DSM显然这不是熊猫认可的读取文件的方法。它可能会起作用,也可能会以惊人的失败告终。非常感谢。这是我开始使用的方法。@DSM显然这不是熊猫认可的读取文件的方法。它可能会起作用,也可能会以惊人的失败告终。非常感谢。这是我开始使用的方法。@DSM显然这不是熊猫认可的读取文件的方法。它可能会起作用,也可能会以惊人的失败告终。非常感谢。这是我开始使用的方法。@DSM显然这不是熊猫认可的读取文件的方法。它可能会起作用,也可能会以惊人的失败告终。