在utf8中迭代两个数据帧的列和str.encode

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在utf8中迭代两个数据帧的列和str.encode相关的知识,希望对你有一定的参考价值。

我目前正在运行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

以上是关于在utf8中迭代两个数据帧的列和str.encode的主要内容,如果未能解决你的问题,请参考以下文章

迭代 Pandas Dataframe 中的列和行

Python Pandas:如何在数据帧的每行中选择两个相等的列

Pandas列表的列,通过迭代(选择)三列的每个列表元素作为新列和行来创建多列[重复]

在R中将具有不同长度和两个条件的不同数据帧的列相乘

Pandas:迭代连接存储在数据框字典中的列

两个数据帧的数组列的平均值并在pyspark中找到最大索引