如何从CSV文件的子集创建自定义DataFrame

2024-06-28 19:51:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个CSV文件,如下所示:

    1, 2, 3, 4, 5 ...
    0, 1, 0, 1, 0 ...
    0, 1, 0, 1, 0 ...
    str1, str2, str3, str4, str5 ...
    val1, val1.1, val1.2, val1.3, val1.4 ...
    val2, val2.1, val2.2, val2.3, val2.4 ...
...

我想生成一个如下所示的数据帧:

^{pr2}$

以下是我的尝试:

for f in files:
    data = pd.read_excel(f)
    df = df.append(data)

df[5:10] //only care about values in rows below [str1, str2, ..., strn].
d = df.ix[:, '2' : '5']
d.columns = ['str2', 'str3', 'str4', 'str5'] //rename columns, reduce table size.

这会产生:

str2 str3 str4 str5 
val1.1 val1.2 val1.3 val1.4 ...
...

如何消除str3str4以获得我最初想要的数据帧?在


Tags: columns文件csv数据indfdataval1
2条回答

在我看来,这样做可以更有效率。在

只解析(读取)您真正需要的数据-这将更快,并将显著减少内存消耗。除此之外,使用pd.concat()一次而不是使用df.append()添加每个新的DF应该快得多。在

代码:

import glob
import pandas as pd


def get_merged(files, **kwargs):
    return pd.concat([pd.read_csv(f, **kwargs) for f in files], ignore_index=True)


fmask = r'd:/temp/__0?.csv'
files = glob.glob(fmask)

df = get_merged(files, sep='\s*,\s*', usecols=['str2', 'str5'],
                skiprows=3, nrows=2)

print(df)

输出:

^{pr2}$

如果使用Excel文件,只需将read_csv更改为get_merged()函数中的read_excel,并检查nrows参数是否在read_excel()函数中工作

文件:

_uu01.csv:

1, 2, 3, 4, 5
0, 1, 0, 1, 0
0, 1, 0, 1, 0
str1, str2, str3, str4, str5
val1, val1.1, val1.2, val1.3, val1.4
val2, val2.1, val2.2, val2.3, val2.4
..................
.................
..................
..................

_yu02.csv:

^{4}$

您可以简单地删除任何不需要的列。查看关于删除Pandas DataFrame列的讨论:Delete column from pandas DataFrame

然后转到文档:http://pandas.pydata.org/pandas-docs/stable/dsintro.html#column-selection-addition-deletion

df = df.drop('str3', 1)
df = df.drop('str4', 1)

相关问题 更多 >