在 utf8 中迭代两个数据帧的列和 str.encode
Iterate over two dataframes' columns and str.encode in utf8
我目前 运行 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.) 的值错误和长度不匹配错误
您可以使用 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)
使用这个:
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
我目前 运行 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.) 的值错误和长度不匹配错误
您可以使用 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)
使用这个:
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