Python 读取pandas中CSV文件的最后一行以外的所有内容
我在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 =
#!/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