Python 迭代两个数据帧';列和str.encode采用utf8编码

Python 迭代两个数据帧';列和str.encode采用utf8编码,python,pandas,loops,unicode,encode,Python,Pandas,Loops,Unicode,Encode,我目前运行的是Python2.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

我目前运行的是Python2.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.)的值错误和长度不匹配错误。

您可以使用
选择\u 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)

您可以使用
select\u 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)
使用以下命令:

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)

始终在问题中显示完整的
回溯
。将列表理解写为正常的
for
循环,这样可能错误将显示代码的哪一部分产生问题,并且您可以在正常的
for
循环中添加
print()
,以查看变量中的值。您还可以使用
len()
来判断是否存在
长度不匹配错误
我不明白两件事:(1)为什么将结果分配到
y.columns
而不是
y[col]
?(2)
apply()
给你
x
但是你不转换它-你试着把
y[col]
放在生成器
(…)
。在
apply()
中你使用
(y[col]…)
这个代码创建生成器。
apply()
给你单个单元格的值,列不完整-请参阅@coldspeed answer-
u.apply(lambda x:x.str.encode('utf-8'))
始终在问题中显示完整的
回溯
。对于
循环,请将列表理解写为正常的
,这样可能错误将显示代码的哪一部分出现问题,并且您可以添加
print()
在正常
中,用于
循环以查看变量中的值。您还可以使用
len()
来判断是否存在
长度不匹配错误
我不明白两件事:(1)为什么将结果分配到
y.columns
而不是
y[col]
?(2)
apply()
给你
x
但是你不转换它-你试着把
y[col]
放在生成器
(…)
。在
apply()
中你使用
(y[col]…)
这个代码创建生成器。
apply()
给你单个单元格的值,列不全-请参阅@coldspeed answer-
u.apply(lambda x:x.str.encode('utf-8'))中的代码
。您可以直接在
df.values
zip
上迭代,只需将所需的两列放在一起即可。。您可以直接在
df.values
zip
上迭代您需要的两列。即使应用了这两种方法,我仍然可以看到所有列的索引([u'Name',u'Type'],dtype='object')@TH14您还没有显示数据,因此我无法进一步帮助您。我建议打开一个新问题,解释为什么当前的答案不起作用。列名中的unicode“u”到底意味着什么?@TH14这是一个python2东西,其中字符串可以是
str
unicode
。现在,字符串只有一种类型:
str
。哦,好的,知道了,谢谢你的帮助!我不习惯处理unicode问题,因为我只使用过Python3。即使应用了这两种方法,我仍然可以看到所有列的索引([u'Name',u'Type'],dtype='object')@TH14您还没有显示您的数据,因此我无法进一步帮助您。我建议打开一个新问题,解释为什么当前的答案不起作用。列名中的unicode“u”到底意味着什么?@TH14这是一个python2东西,其中字符串可以是
str
unicode
。现在,字符串只有一种类型:
str
。哦,好的,知道了,谢谢你的帮助!我不习惯处理unicode问题,因为我只使用过Python3。