如何用pd.read_table在Python中正确加载CSV时间列数值?
解决pd.read_table读取Time列的数值格式问题
问题原因
你遇到的ValueError是因为Time列的字符串包含多个小数点(比如3.975.808),这是由于文件使用了点作为千位分隔符,直接强制转换float会失败。
解决方案
方法1:读取时针对性清洗Time列
读取时不要全局强制dtype=np.float,而是用converters参数单独处理Time列,先清理字符串再转数值:
import pandas as pd def parse_time(time_str): # 移除多余的小数点,仅保留最后一个作为小数分隔符 split_parts = time_str.split('.') if len(split_parts) > 1: integer_part = ''.join(split_parts[:-1]) decimal_part = split_parts[-1] return float(f"{integer_part}.{decimal_part}") return float(time_str) # 读取文件,指定converters处理Time列 df = pd.read_table(path, delimiter=";", converters={'Time': parse_time})
方法2:利用区域格式参数直接读取(更高效)
如果文件是因区域格式差异导致的(比如欧洲地区常用点作千位分隔、逗号作小数分隔),可以直接用decimal和thousands参数读取:
import pandas as pd # 假设文件中小数分隔符是逗号,千位分隔符是点 df = pd.read_table(path, delimiter=";", decimal=',', thousands='.')
步骤3:设置Time列保留5位小数
读取完成后,用round()方法让Time列保留5位小数:
df['Time'] = df['Time'].round(5)
如果只是需要显示时保留5位小数(不修改实际数值),可以设置全局显示格式:
pd.options.display.float_format = '{:.5f}'.format
内容的提问来源于stack exchange,提问作者programmer12345
相关产品推荐
相关产品推荐

