我想要读取CSV文件后,条件动态跳过使用python.

条件-当我在CSV中发现6个COLS时,从那里读取,或者当我发现COL将序列命名为这6个COLS时.

File.csv

Col1,col2,col3

1,2,3

13,u,u

,,,

,,,

Col1,col2,col3,col4

1,2,3,4

13,u,u,y

,,,

,,,

Col1,col2,col3,col4,col5,col6

1,2,3,4,5,6

qw,ers,hh,yj,df,ji

现在我正在使用pandas.read_csv()读取此文件

我知道在第10排我已经要求了COLS.

pandas.read_csv("file.csv", skiprows=10, header=None)

我想要动态跳过这一点,当我们跳过行时,当我们6,或者在这个序列COL1,COL2,COL3,COL4,COL5,COL6中的任何一个.

start =  df.loc[df.FILE-START == 'col1,col2,col3,col4,col5,col6'].index[0]
df = pd.read_csv(filename, skiprows = start + 1)

我试过了,但没用.

推荐答案

Update

使用csv模块的更强大的版本:

import pandas as pd
import csv
import io

with open('File.csv') as fp:
    while True:
        pos = fp.tell()
        reader = csv.reader(io.StringIO(fp.readline()))
        row = next(reader)
        if len(row) == 6:
            break
    fp.seek(pos)
    df = pd.read_csv(fp)

Old answer

您可以逐行阅读文件,直到找到6列或5个逗号(注意它们之间是否有引号和逗号.但对于简单的CSV文件来说,这是很好的:

import pandas as pd

with open('File.csv') as fp:
    while True:
        pos = fp.tell()
        row = fp.readline()
        if row.count(',') == 5:
            break
    fp.seek(pos)
    df = pd.read_csv(fp)

输出:

>>> df
  Col1 col2 col3 col4 col5 col6
0    1    2    3    4    5    6
1   qw  ers   hh   yj   df   ji

Python相关问答推荐

自定义新元未更新参数

替换字符串中的点/逗号,以便可以将其转换为浮动

Pandas 在最近的日期合并,考虑到破产

使用新的类型语法正确注释ParamSecdecorator (3.12)

Pystata:从Python并行运行stata实例

为什么带有dropna=False的groupby会阻止后续的MultiIndex.dropna()工作?

try 将一行连接到Tensorflow中的矩阵

OR—Tools中CP—SAT求解器的IntVar设置值

把一个pandas文件夹从juyter笔记本放到堆栈溢出问题中的最快方法?

从嵌套的yaml创建一个嵌套字符串,后面跟着点

Django admin Csrf令牌未设置

判断solve_ivp中的事件

未调用自定义JSON编码器

Python Pandas—时间序列—时间戳缺失时间精确在00:00

在方法中设置属性值时,如何处理语句不可达[Unreacable]";的问题?

在Python中使用yaml渲染(多行字符串)

freq = inject在pandas中做了什么?''它与freq = D有什么不同?''

从嵌套极轴列的列表中删除元素

如何反转一个框架中列的值?

我什么时候应该使用帆布和标签?