Перебрать два столбца данных и str.encode в utf8 - PullRequest
1 голос
/ 07 апреля 2019

В настоящее время я работаю на Python 2.7 и имею два кадра данных x и y. Я хотел бы использовать какое-то понимание списков для итерации по обоим столбцам и использовать str.encode ('UTF8) в каждом столбце, чтобы избавиться от Unicode.

Это прекрасно работает и легко читается, но мы хотели попробовать использовать что-то быстрее и эффективнее.

for col in y:
  if y[col].dtype=='O':
    y[col] = y[col].str.encode("utf-8")

for col in x:
  if x[col].dtype=='O':
    x[col] = x[col].str.encode("utf-8")

Другие методы, которые я пробовал:

1.)[y[col].str.encode("utf-8") for col in y if y[col].dtype=='O' ]

2.)y.columns= [( y[col].str.encode("utf-8") if y[col].dtype=='O' else y[col]) for col in y ]

3.)y.apply(lambda x : (y[col].str.encode("utf-8") for col in y if y[col].dtype=='O'))

Я получаю значения ошибок и ошибки несоответствия длины для 2.) и 3.)

Ответы [ 2 ]

4 голосов
/ 07 апреля 2019

Вы можете использовать select_dtypes, чтобы получить столбцы объекта, затем вызвать apply для каждого столбца, чтобы закодировать его:

u = df.select_dtypes(include=[object])
df[u.columns] = u.apply(lambda x: x.str.encode('utf-8'))

Для этого напишите небольшую функцию и вызовите ее для каждого кадра данных.

def encode_df(df):
    u = df.select_dtypes(include=[object])
    df[u.columns] = u.apply(lambda x: x.str.encode('utf-8'))
    return df

x, y = encode_df(x), encode_df(y)
0 голосов
/ 07 апреля 2019

Используйте это:

import pandas as pd
import numpy as np

df = pd.DataFrame({'a':[1,2,3,4], 'b':[11,12,13,14]})

def f(x):
    return x**2

pd.DataFrame([[f(i) for i in tuple(v)] for k,v in df.iterrows()], columns=df.columns)
Out[54]: 
    a    b
0   1  121
1   4  144
2   9  169
3  16  196
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...