![](/img/trans.png)
[英]How to create a pandas dataframe from a subset of an existing pandas dataframe
[英]How To Create Custom DataFrame From Subset Of CSV File
我有一个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 ...
...
我想生成一个如下所示的数据框:
str2, str5
val1.1 val2.1
val2.1 val2.2
...
这是我的尝试:
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 ...
...
如何消除str3
和str4
以获取我原来的预期数据帧?
IMO可以更有效地完成。
解析(读取)您真正需要的数据 - 这将更快,并将显着减少内存消耗。 除了使用pd.concat()
一次而不是使用pd.concat()
添加每个新DF df.append()
应该快得多。
码:
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)
输出:
str2 str5
0 val1.1 val1.4
1 val2.1 val2.4
2 val21.1 val21.4
3 val22.1 val22.4
如果您正在使用Excel文件的工作只是改变read_csv
到read_excel
在get_merged()
函数,并检查是否nrows
在参数工作read_excel()
函数
文件:
__01.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
..................
.................
..................
..................
__02.csv:
1, 2, 3, 4, 5
0, 1, 0, 1, 0
0, 1, 0, 1, 0
str1, str2, str3, str4, str5
val21, val21.1, val21.2, val21.3, val21.4
val22, val22.1, val22.2, val22.3, val22.4
.................................
您只需删除任何不需要的列。 查看有关删除Pandas DataFrame列的讨论: 从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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.