Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在一次操作中转换一组列,而不是多个列?_Python_Pandas - Fatal编程技术网

Python 在一次操作中转换一组列,而不是多个列?

Python 在一次操作中转换一组列,而不是多个列?,python,pandas,Python,Pandas,因此,我在一个数据帧中有一组列,所有这些列都需要转换为字符串(从浮点数),然后截断为前11个字符。我一次只写一个专栏就可以做到这一点,但我怎么能一次写五、六个专栏呢 以下是我的工作: df_combined['FileX'] = df_combined['FileX'].astype(str).str[:10] 这将准确地打印出我期望的内容,并转换整个列(在输出文件中验证)。但是,我有文件X、Y、Z、AA等的列,并且希望对所有这些列执行相同的操作。理想情况下,我会一次完成,而不是每次都重复上面

因此,我在一个数据帧中有一组列,所有这些列都需要转换为字符串(从浮点数),然后截断为前11个字符。我一次只写一个专栏就可以做到这一点,但我怎么能一次写五、六个专栏呢

以下是我的工作:

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]))
成功了。谢谢!我不知道我可以继续将不同的转换叠加到同一行中。太好了,很高兴提供帮助。如果这解决了您的问题,请将此标记为已回答,不胜感激