【发布时间】:2017-04-10 08:22:44
【问题描述】:
我想:
- 将数百个制表符分隔文件读入 pandas DataFrame
- 根据
FileNo决定是否应用函数 - 将函数应用于选定列上的每个元素
- 将所有 DataFrame 附加并连接到单个帧中
示例文件:
ID FileNo Name A1 A2 A3
1 0 John a-b b-a a-a
2 0 Carol b-b a-b a-b
[...]
500 0 Steve a-a b-b a-b
501 0 Jack b-a b-a a-b
每个文件的真实尺寸:2000x15000
功能:反转字符串。
flip_over = lambda x: x[::-1]
or
my_dict = {'a-b':'b-a', 'a-a':'a-a', 'b-b':'b-b', 'b-a':'a-b'}
map(my_dict)
我目前拥有的:
whether_to_flip = [7,15,23,36,48,85]
frames = []
base_path = "/home/user/file_"
for i in range(0, 100):
path = base_path + str(i) + ".tsv"
df = pd.read_csv(path, sep="\t", header=None)
df['FileNo'] = str(i)
if i in whether_to_flip:
for j in range(3,6):
df[j] = df[j].map(my_dict)
frames.append(df)
combined = pd.concat(frames, axis=0, ignore_index=True)
目前完成读取和处理需要几个小时,当我需要增加要读取的文件数量时,我达到了内存限制。
对于改进此代码的任何帮助,我将不胜感激。特别是,
- 这是应用函数的最佳/最快方式吗?
- 这是追加和连接许多 DataFrame 的最佳/最快方式吗?
谢谢。
【问题讨论】:
标签: python pandas dictionary apply