Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas read_csv()有条件地跳过标题行_Python_Pandas_Csv - Fatal编程技术网

Python Pandas read_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

我试图读取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-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参数必须是单个字符,所以整个单词都不能工作。