Python 读取pandas中CSV文件的最后一行以外的所有内容

Python 读取pandas中CSV文件的最后一行以外的所有内容,python,pandas,dataframe,Python,Pandas,Dataframe,我在pandas中读取了CSV文件,其中包括: #!/usr/bin/env python import pandas as pd import sys filename = sys.argv[1] df = pd.read_csv(filename) 不幸的是,这些文件的最后一行经常损坏(逗号数错误)。目前,我在文本编辑器中打开每个文件并删除最后一行 是否可以删除加载CSV的同一python/pandas脚本中的最后一行,以避免执行此额外的非自动步骤?通过,它将自动跳过这一行 df =

我在pandas中读取了CSV文件,其中包括:

#!/usr/bin/env python

import pandas as pd
import sys

filename = sys.argv[1]
df = pd.read_csv(filename)
不幸的是,这些文件的最后一行经常损坏(逗号数错误)。目前,我在文本编辑器中打开每个文件并删除最后一行

是否可以删除加载CSV的同一python/pandas脚本中的最后一行,以避免执行此额外的非自动步骤?

通过,它将自动跳过这一行

df = pd.read_csv(filename, error_bad_lines=False)
error\u bad\u lines
的优点是它会跳过任何错误的行,而不会阻塞任何错误的行,但是如果最后一行总是空的,那么
skipfooter=1
更好


感谢@DexterMorgan指出,
skipfooter
选项强制引擎使用比c引擎慢的python引擎来解析csv。

Read。此处的“skipfooter”参数可用于指定不希望从.csv文件结尾处读取的行数。可能会对您有所帮助。

您可以使用
skipfooter
参数在读取csv时省略最后n行:

df = pd.read_csv(filename, skipfooter=3, engine='python')

在本例中,最后3行是不完整的。

您删除了一个关于提取数字的问题,无论如何,我建议使用
str.extract
用于df.columns[2:]:df[col]=df[col].str.extract(r'(\d+).astype(int)
@EdChum您的代码是否保留小数点?@EdChum我取消了上一个问题。关于
skipfooter
选项,最好知道它不适用于
dtypes
选项:
ValueError:返回到“python”引擎,因为“c”引擎不支持skipfooter,但这会导致忽略“dtype”,因为“python”引擎不支持它。(注意“转换器”选项提供了类似的功能。)
@DexterMorgan肯定会添加一个选项“skiprows”,c引擎支持该选项。如果您知道csv的行数,可以按如下方式添加:
pd.read\u csv(文件名,skiprows=[999])
(在我的例子中有1000行)-请注意,如果要指定给定行数的行,必须在列表中定义行。@Chaoste但坏行位于末尾,你不想改成
nrows
吗?@EdChum我正在查看文档,因为我现在需要它,直到现在我才看到这个选项。非常感谢。因此,在我的情况下,我必须编写
nrows=999
,而不是
skiprows=[1000]
。另一个解决方案是通过命令行删除最后一行,该命令行速度非常快:
head-n-1 dataframe.csv>temp.csv&&mv temp.csv dataframe.csv