【发布时间】:2017-04-25 18:01:03
【问题描述】:
我确实搜索了在线帖子,但我发现的都是如何只在混合数据框中舍入浮点列,但我的问题是如何舍入字符串类型列中的浮点值。
这样说我的数据框:
pd.DataFrame({'a':[1.1111,2.2222, 'aaaa'], 'b':['bbbb', 2.2222,3.3333], 'c':[3.3333,'cccc', 4.4444]})
寻找类似的输出
pd.DataFrame({'a':[1.1,2.2, 'aaaa'], 'b':['bbbb', 2.2,3.3], 'c':[3.3,'cccc', 4.4]})
----上面是一个直接的问题-----
----我这样做的原因如下----
我有 3 个 csv 文件,每个文件都有字符串标题和浮点值,具有不同的行号和列号。
我需要将 3 水平附加到一个数据帧中,然后将其作为新的 csv 导出,并用空行分隔。
我的 3 个数据框是这样的:
一个:
两个:
三:
到
请注意,输出数据帧包含来自 3 个子数据帧的标头
所以,当我导入它们时,第一个 csv 当然是由 pd.read_csv 导入的,没问题。
然后我使用 .append(pd.Series([np.NaN])) 创建一个空行作为分隔符行
然后加载第二个 csv,然后我使用 pd.append(),但如果我在“read_csv()”中不包含“header=None”,那么第二个将不会水平映射到第一个下方,因为 csv文件的行和列不均匀。
所以两个选项,
-
在'read_csv()'中包含'header=None',那么我不能简单地使用round()作为
df = df.round()
不行,需要想办法只对每一列的数值进行四舍五入
另请注意,当包含 'header=None' 时, 所有列类型都是“对象”,按 df.types
- 在“read_csv()”中不包含“header=None”,然后我可以对每个数据帧进行四舍五入,但无法将它们与标题水平组合。
有什么建议吗?
csv 示例
import pandas as pd
import io
exp = io.StringIO("""
month;abc;cba;fef;sefe;yjy;gtht
100;0.45384534;0.43455;0.56385;0.5353;0.523453;0.53553
200;0.453453;0.453453;0.645396;0.76786;0.36327;0.453659
""")
df = pd.read_csv(exp, sep=";", header=None)
print(df.dtypes)
df = df.applymap(lambda x: round(x, 1)
if isinstance(x, (int, float)) else x)
print(df)
【问题讨论】: