Python 迭代两个数据帧';列和str.encode采用utf8编码
我目前运行的是Python2.7,有两个数据帧x和y。我想使用某种列表理解来迭代这两列,并在每列上使用str.encode('UTF8)来摆脱unicode 这是非常好的工作,很容易阅读,但想尝试使用更快,更有效的东西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
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。