Python Pandas read_csv()有条件地跳过标题行
我试图读取csv文件,但我的csv文件不同。有些有不同的格式,有些有其他格式。我正在尝试添加控件,以便不需要编辑代码或输入文件 我的问题是,有些csv文件在列标题上方有一行字符串。例如:Python Pandas read_csv()有条件地跳过标题行,python,pandas,csv,Python,Pandas,Csv,我试图读取csv文件,但我的csv文件不同。有些有不同的格式,有些有其他格式。我正在尝试添加控件,以便不需要编辑代码或输入文件 我的问题是,有些csv文件在列标题上方有一行字符串。例如: Created on 12-11-2018,CryptoDataDownload.com Date,Symbol,Open,High,Low,Close,Volume From,Volume To 2018-12-11 11-AM,ADABTC,8.6e-06,8.61e-06,8.55e-06,8.57e-0
Created on 12-11-2018,CryptoDataDownload.com
Date,Symbol,Open,High,Low,Close,Volume From,Volume To
2018-12-11 11-AM,ADABTC,8.6e-06,8.61e-06,8.55e-06,8.57e-06,301141.7,2.59
2018-12-11 10-AM,ADABTC,8.69e-06,8.72e-06,8.6e-06,8.6e-06,236949.63,2.05
如果我导入此文件,delimeter将使用第一行并将文件分为两列,分别创建于2018年11月12日和CryptoDataDownload.com
这就是df.head的外观:
Created on 12-11-2018 CryptoDataDownload.com
Date Symbol Open High Low Close Volume From Volume To
2018-12-11 11-AM ADABTC 8.6e-06 8.61e-06 8.55e-06 8.57e-06 301141.7 2.59
2018-12-11 10-AM ADABTC 8.69e-06 8.72e-06 8.6e-06 8.6e-06 236949.63 2.05
2018-12-11 09-AM ADABTC 8.7e-06 8.7e-06 8.62e-06 8.69e-06 509311.39 4.41
2018-12-11 08-AM ADABTC 8.69e-06 8.7e-06 8.63e-06 8.7e-06 111367.34 0.9656
我想检查这个文件是否有这一行,如果有,跳过它
我该怎么做 如果CSV文件中的标题遵循类似的模式,您可以做一些简单的事情,比如在决定是否跳过第一行之前嗅出第一行
filename = '/path/to/file.csv'
skiprows = int('Created in' in next(open(filename)))
df = pd.read_csv(filename, skiprows=skiprows)
好的做法是使用上下文管理器,因此您也可以这样做:
filename = '/path/to/file.csv'
skiprows = 0
with open(filename, 'r+') as f:
for line in f:
if line.startswith('Created '):
skiprows = 1
break
df = pd.read_csv(filename, skiprows=skiprows)
如果CSV文件中的标题遵循类似的模式,您可以做一些简单的事情,比如在决定是否跳过第一行之前嗅出第一行
filename = '/path/to/file.csv'
skiprows = int('Created in' in next(open(filename)))
df = pd.read_csv(filename, skiprows=skiprows)
好的做法是使用上下文管理器,因此您也可以这样做:
filename = '/path/to/file.csv'
skiprows = 0
with open(filename, 'r+') as f:
for line in f:
if line.startswith('Created '):
skiprows = 1
break
df = pd.read_csv(filename, skiprows=skiprows)
在pandas read_csv命令中使用“comment”参数时,可以跳过以特定字符开头的行。在您的情况下,可以使用以下代码跳过以C开头的行:
filename = '/path/to/file.csv'
pd.read_csv(filename, comment = "C")
在pandas read_csv命令中使用“comment”参数时,可以跳过以特定字符开头的行。在您的情况下,可以使用以下代码跳过以C开头的行:
filename = '/path/to/file.csv'
pd.read_csv(filename, comment = "C")
那么,您是否尝试添加skiprows=1来读取_csv?@coldspeed并非我所有的文件都有这一行,因此我需要首先检查这一行是否存在。否则,我将删除我的列标题您的所有数据帧是否都有相同的标题,或者可能不同?是否存在与这些标题相关联的模式(例如,在…)上创建的标题?标题也不同,但我在导入后将其编辑为相同的。我建议将分隔符向上移动一个缩进级别,因为您似乎只需要检查第一行。因此,您是否尝试添加skiprows=1以读取_csv?@coldspeed并非我的所有文件都有这一行,因此我需要首先检查这一行是否存在。否则,我将删除我的列标题您的所有数据帧是否都有相同的标题,或者可能不同?是否存在与这些标题相关联的模式(例如,在…)上创建的标题?标题也不同,但我在导入后将它们编辑为相同的。我建议将中断移动到一个缩进级别,因为您似乎只需要检查第一行。给我TypeError:“numpy.ndarray”对象是不可调用的错误。这是nextf 0索引吗?@iso_9001;这是我代码中遇到的一个奇怪错误。你能找出错误吗?请随意编辑我的答案。谢谢您可能在编辑时删除了我的工作代码。我认为您的代码不起作用,因为startswith函数返回true或false,而不是索引。给我TypeError:'numpy.ndarray'对象是不可调用的错误。这是nextf 0索引吗?@iso_9001;这是我代码中遇到的一个奇怪错误。你能找出错误吗?请随意编辑我的答案。谢谢您可能在编辑时删除了我的工作代码。我认为您的代码不起作用,因为startswith函数返回true或false,而不是index。不能正常工作。我在该行后面有8列,但这会创建一个5列的df,因为列名以“C”Close开头。AFAIK comment参数必须是单个字符,因此整个单词将无法工作。无法正常工作。我在那行后面有8列,但这会创建一个5列的df,因为列名以“C”Close开头。AFAIK comment参数必须是单个字符,所以整个单词都不能工作。