python更改数据框指定位置的数据_python – 更改数据框中多个loc的最快方法
我有一個(gè)包含100萬行的pandas數(shù)據(jù)幀.我想用另一組值替換列中900,000行的值.有沒有for循環(huán)(我需要兩天才能完成)的快速方法嗎?
例如,查看此示例數(shù)據(jù)框,其中我已將100萬行壓縮為8行
import numpy as np
import pandas as pd
df = pd.DataFrame()
df['a'] = [-1,-3,-4,-4,-3, 4,5,6]
df['b'] = [23,45,67,89,0,-1, 2, 3]
L2 = [-1,-3,-4]
L5 = [9,10,11]
我希望在沒有for循環(huán)的情況下,在單次拍攝中替換a為-1,-3,-4的值,或者盡可能快地替換.
關(guān)鍵部分是L5中的值必須根據(jù)需要重復(fù).
我試過了
df.loc[df.a < 0, 'a'] = L5
但這只適用于len(df.a.values)== len(L5)
最佳答案 通過zip從兩個(gè)列表創(chuàng)建的字典使用
map,最后在
fillna之前替換為原始的非匹配值:
d = dict(zip(L2, L5))
print (d)
{-1: 9, -3: 10, -4: 11}
df['a'] = df['a'].map(d).fillna(df['a'])
print (df)
a b
0 9.0 23
1 10.0 45
2 11.0 67
3 11.0 89
4 10.0 0
5 4.0 -1
6 5.0 2
7 6.0 3
性能:
它取決于替換列表長度的值的數(shù)量:
列表長度為100:
np.random.seed(123)
N = 1000000
df = pd.DataFrame({'a':np.random.randint(1000, size=N)})
L2 = np.arange(100)
L5 = np.arange(100) + 10
In [336]: %timeit df['d'] = np.select([df['a'] == i for i in L2], L5, df['a'])
180 ms ± 1.07 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [337]: %timeit df['a'].map(dict(zip(L2, L5))).fillna(df['a'])
56.9 ms ± 2.55 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
如果列表長度很小(例如3):
np.random.seed(123)
N = 1000000
df = pd.DataFrame({'a':np.random.randint(100, size=N)})
L2 = np.arange(3)
L5 = np.arange(3) + 10
In [339]: %timeit df['d'] = np.select([df['a'] == i for i in L2], L5, df['a'])
11.9 ms ± 40.6 μs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [340]: %timeit df['a'].map(dict(zip(L2, L5))).fillna(df['a'])
54 ms ± 215 μs per loop (mean ± std. dev. of 7 runs, 10 loops each)
總結(jié)
以上是生活随笔為你收集整理的python更改数据框指定位置的数据_python – 更改数据框中多个loc的最快方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab怎么删除上一条命令_怎么恢复
- 下一篇: python 画系统关联图_Python