Как перебрать строки данных, заменяя значения из соответствующего кортежа более pythoni c способом? - PullRequest
1 голос
/ 14 января 2020

Я могу заменить значения в указанном столбце c кадра данных pandas путем итерации по строкам и сопоставить эти значения с соответствующими парами кортежей, содержащимися в списке кортежей.

Однако, когда я запускаю этот код на большом фрейме данных, он становится относительно медленным, поскольку ему приходится перебирать весь список кортежей, чтобы найти соответствие для строки в фрейме данных. (12280it [23:21, 8.66it / s])

Есть ли еще способ pythoni c для сопоставления и замены? Например, индексирование списка кортежей и фрагмента кода, который фильтруется по индексу?

Мой использованный код можно найти ниже.

import pandas as pd 
from tqdm import tqdm

# initialize list of lists 
data = [['some', 1], ['random', 10], ['stuff', 14],['which',8],['is',22],['irrelevant',24]] 

# Create the pandas DataFrame 
df = pd.DataFrame(data, columns = ['Strings', 'Number']) 
df
    Strings     Number
0   some         1
1   random       10
2   stuff        14
3   which        8
4   is           22
5   irrelevant   24
#Create lists necessary to make tuples
x = list(range(1, 25))
y = list(range(345, 395, 2))

#Create tuple
z = list(zip(x,y))

#Replace number values in dataframe
#With corresponding values from tuple
for index, row in tqdm(df.iterrows()):
    for x in z:
        if row["Number"] ==x[0]:
            df.set_value(index,"Number", int(x[1]))

приводит к

df
    Strings     Number
0   some        345
1   random      363
2   stuff       371
3   which       359
4   is          387
5   irrelevant  391

1 Ответ

2 голосов
/ 14 января 2020

Используйте map

z = dict(zip(x,y))
df['Number'] = df['Number'].map(z)

      Strings  Number
0        some     345
1      random     363
2       stuff     371
3       which     359
4          is     387
5  irrelevant     391

Чтобы отобразить только некоторые значения и избежать NaN, используйте replace

df['Number'] = df['Number'].replace(z)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...