Python 使用pandas读取结构混乱的csv文件
我在读取csv文件时遇到问题。问题是由于文件的结构造成的。我想把它读入pandas dataframe对象,但有些行比其他行有更多的列。例如,我可能希望大多数数据的格式如下: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
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显然这不是熊猫认可的读取文件的方法。它可能会起作用,也可能会以惊人的失败告终。