Python 在一次操作中转换一组列,而不是多个列?
因此,我在一个数据帧中有一组列,所有这些列都需要转换为字符串(从浮点数),然后截断为前11个字符。我一次只写一个专栏就可以做到这一点,但我怎么能一次写五、六个专栏呢 以下是我的工作:Python 在一次操作中转换一组列,而不是多个列?,python,pandas,Python,Pandas,因此,我在一个数据帧中有一组列,所有这些列都需要转换为字符串(从浮点数),然后截断为前11个字符。我一次只写一个专栏就可以做到这一点,但我怎么能一次写五、六个专栏呢 以下是我的工作: df_combined['FileX'] = df_combined['FileX'].astype(str).str[:10] 这将准确地打印出我期望的内容,并转换整个列(在输出文件中验证)。但是,我有文件X、Y、Z、AA等的列,并且希望对所有这些列执行相同的操作。理想情况下,我会一次完成,而不是每次都重复上面
df_combined['FileX'] = df_combined['FileX'].astype(str).str[:10]
这将准确地打印出我期望的内容,并转换整个列(在输出文件中验证)。但是,我有文件X、Y、Z、AA等的列,并且希望对所有这些列执行相同的操作。理想情况下,我会一次完成,而不是每次都重复上面的步骤
大概是这样的:
files= ['FileX,'FileY', 'FileZ']
df_combined[files] = df_combined[files].astype(str).str[:10]
不过,这给我带来了一个“set not hashable”错误。有办法做到这一点吗
谢谢你的帮助 像这样的东西怎么样:
df.apply(lambda x: x.astype('str').apply(lambda y: y[:10]))
第一个应用在每一列上(将列转换为
str
),第二个应用在截断的列的每个条目上。类似这样的情况如何:
df.apply(lambda x: x.astype('str').apply(lambda y: y[:10]))
第一个应用在每列上(将列转换为
str
),第二个应用在截断的列的每个条目上。只有系列
具有.str
属性,而数据帧
没有。您必须处理各个列:
df[files].apply(lambda x: x.astype(str).str[:1], axis=1)
您在原始帖子中报告的错误与其他内容有关。我无法复制它。只有
系列
具有.str
属性,而数据帧
没有。您必须处理各个列:
df[files].apply(lambda x: x.astype(str).str[:1], axis=1)
您在原始帖子中报告的错误与其他内容有关。我无法复制它。您需要按如下方式应用
str[:10]
列:
df_combined[files].astype(str).apply(lambda x: x.str[:10], axis=1)
您需要按如下方式按列应用
str[:10]
df_combined[files].astype(str).apply(lambda x: x.str[:10], axis=1)
这将完成您的任务:
df_combined.loc[:, files] = df_combined.loc[:, files].apply(
lambda series: series.astype(str).str[:11])
(或使用列表):
然而,这对我来说似乎很奇怪。也许你想要某种程度的十进制精度
例如,它们显示相同的修改字符串值,尽管我的系数为10:
df = pd.DataFrame([100000000 * 10 ** n for n in range(5)])
>>> df
0
0 100000000
1 1000000000
2 10000000000
3 100000000000
4 1000000000000
>>> df.apply(lambda series: series.astype(str).str[:11])
0
0 100000000
1 1000000000
2 10000000000
3 10000000000
4 10000000000
这将完成您的任务:
df_combined.loc[:, files] = df_combined.loc[:, files].apply(
lambda series: series.astype(str).str[:11])
(或使用列表):
然而,这对我来说似乎很奇怪。也许你想要某种程度的十进制精度
例如,它们显示相同的修改字符串值,尽管我的系数为10:
df = pd.DataFrame([100000000 * 10 ** n for n in range(5)])
>>> df
0
0 100000000
1 1000000000
2 10000000000
3 100000000000
4 1000000000000
>>> df.apply(lambda series: series.astype(str).str[:11])
0
0 100000000
1 1000000000
2 10000000000
3 10000000000
4 10000000000
您编写了:files=['FileX,'FileY','FileZ']。这仅仅是一个打字错误,还是它也出现在你的代码中?它应该是files=['FileX','FileY','FileZ'],也就是说,在XYou写到:files=['FileX,'FileY','FileZ']之后,您忘记了。这仅仅是一个打字错误,还是它也出现在你的代码中?它应该是files=['FileX','FileY','FileZ'],也就是说,在X之后您忘记了“这工作做得很好,谢谢!然而,它导致了我无法解决的其他问题。当这个应用程序运行时,所有空白值(从源代码中的空白单元格。XSLX文件)转换为“NANN”,并且无论我尝试什么,都不能将它们清除掉。我已经尝试在np.nan上使用.fillna()和.replace()将nan改为其他字符串(最终输出的.xslx文件不能说“nan”,它必须说“Missing”或者诸如此类的。任何帮助都将不胜感激!我不是100%确定你的意思,但是在转换为
str
之前你是否使用了fillna
?类似于:df.apply(lambda x:x.fillna('Missing')。astype('str')。apply(lambda y:y[:10]))谢谢你!我不知道我能不能把不同的转换放在同一行上。很好,很乐意帮忙。如果你把它标记为回答,如果它解决了你的问题,那么它工作得很好,谢谢!它引起了一些我无法解决的事情,但是,所有的空白值。(来自source.xslx文件中的空白单元格)在运行此应用程序时转换为“nan”,无论我如何尝试,都无法摆脱它们。我尝试在np.nan上使用.fillna()和.replace()将nan转换为其他字符串(最终输出.xslx文件不能说“nan”,它必须说“Missing”或者诸如此类的。任何帮助都将不胜感激!我不是100%确定你的意思,但是在转换为str
之前你是否使用了fillna
?类似于:df.apply(lambda x:x.fillna('Missing')。astype('str')。apply(lambda y:y[:10]))
成功了。谢谢!我不知道我可以继续将不同的转换叠加到同一行中。太好了,很高兴提供帮助。如果这解决了您的问题,请将此标记为已回答,不胜感激