如何导入带千位分隔符的欧洲格式股票时间序列至Python/R?
解决欧洲格式CSV股票数据的导入问题
我帮你梳理两种可行的方案,既能保留正确的日期索引,又能把Stock1解析为浮点数:
方案一:直接导入时针对特定列处理(推荐)
问题出在全局设置thousands="."会把日期里的点也当成千位分隔符解析,直接破坏日期格式。我们可以用converters参数单独处理Stock1列,同时直接解析日期列,一步到位:
import pandas as pd def clean_stock1(value): # 移除Stock1中的千位分隔符".",保留逗号作为小数分隔符 return float(value.replace('.', '')) # 读取CSV时指定关键参数 stock_data = pd.read_csv( "stock_data.csv", sep=";", decimal=",", converters={"Stock1": clean_stock1}, # 单独处理Stock1列 parse_dates=["Date"], # 自动解析日期列 dayfirst=True # 必须开启,因为欧洲日期格式是DD.MM.YYYY ) # 设置日期索引 stock_data.set_index("Date", inplace=True)
这样处理的好处是不用修改原CSV文件,直接在导入时完成清洗,而且日期解析完全不受影响。
方案二:导入前预处理CSV文件
如果偏好先清理文件再导入,可以用Python的文件操作逐行修改Stock1的格式,生成干净的CSV后再导入:
import pandas as pd # 预处理原CSV,移除Stock1的千位分隔符 with open("stock_data.csv", "r", encoding="utf-8") as in_file, open("cleaned_stock_data.csv", "w", encoding="utf-8") as out_file: # 先写入表头 header = in_file.readline() out_file.write(header) # 逐行处理数据行 for line in in_file: # 按分号拆分列 columns = line.strip().split(";") # 移除Stock1中的"." columns[1] = columns[1].replace('.', '') # 重新拼接并写入新文件 out_file.write(";".join(columns) + "\n") # 导入清理后的CSV,此时可以正常使用所有参数 stock_data = pd.read_csv( "cleaned_stock_data.csv", sep=";", decimal=",", parse_dates=["Date"], dayfirst=True ) stock_data.set_index("Date", inplace=True)
这个方案适合需要保留干净数据文件的场景,后续导入时就不用再处理格式问题了。
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

