【问题标题】:Pandas: read_csv (read multiple tables in a single file)Pandas:read_csv(在一个文件中读取多个表)
【发布时间】:2023-03-10 03:04:01
【问题描述】:

我有一个包含多个 CSV 表的文件(如下所示)。该文件被上传到数据库。我想对这个文件做一些操作。为此,我正在考虑使用 pandas 使用 read_csv 函数将每个表读入单独的数据帧。但是,通过文档,我没有看到指定要读取/解析的行子集的选项。这可能吗?如果没有,还有其他选择吗?

示例文件:

TABLE_1
col1,col2
val1,val2
val3,val4

TABLE_2
col1,col2,col3,col4
val1,val2,val3,val4
...

...

我可以对文件进行初始传递,以确定每个表的开始/结束行。但是,read_csv 参数之一是“filepath_or_buffer”,但我不完全确定“缓冲区”部分是什么。它是字符串列表还是一个大字符串或其他东西?我可以用什么做缓冲区?有人可以指出一个使用带有缓冲区的 read_csv 的小例子吗?感谢您的任何想法。

【问题讨论】:

  • 可以使用read.csvskipnrow 参数读取这种类型的文件。第一步是运行readLines 并找到表之间的差距。如果有一些一致性会有所帮助。

标签: python pandas


【解决方案1】:

更新:

如果你想跳过特定行[0,1,5,16,57,58,59],你可以使用skiprows

df = pd.read_csv(filename, header=None, 
                 names=['col1','col2','col3'], skiprows=[0,1,5,16,57,58,59])

对于跳过前两行并阅读以下 100 行,您可以使用 skiprowsnrows 参数作为评论中提到的@Richard Telford:

df = pd.read_csv(filename, header=None, names=['col1','col2','col3'],
                 skiprows=2, nrows=100)

这里是“缓冲区”的一个小例子:

import io
import pandas as pd

data = """\
        Name
0  JP2015121
1    US14822
2    US14358
3  JP2015539
4  JP2015156
"""
df = pd.read_csv(io.StringIO(data), delim_whitespace=True, index_col=0)
print(df)

同样没有标题:

data = """\
0  JP2015121
1    US14822
2    US14358
3  JP2015539
4  JP2015156
"""
df = pd.read_csv(io.StringIO(data), delim_whitespace=True, index_col=0,
                 header=None, names=['Name'])

【讨论】:

    猜你喜欢
    • 2021-06-26
    • 2015-08-05
    • 2014-02-14
    • 2020-07-10
    • 1970-01-01
    • 2021-07-14
    • 2019-11-09
    • 2011-11-08
    • 1970-01-01
    相关资源
    最近更新 更多