【发布时间】:2017-04-15 01:08:09
【问题描述】:
编辑:这是第一行:
df = pd.read_csv(os.path.join(path, file), dtype = str,delimiter = ';',error_bad_lines=False, nrows=50)
df["CALDAY"] = df["CALDAY"].apply(lambda x:dt.datetime.strptime(x,'%d/%m/%Y'))
df = df.fillna(0)
我有一个包含 1500 列和 35000 行的 csv 文件。它包含值,但例如以 1.700,35 的形式,而在 python 中我需要 1700.35。当我阅读 csv 时,所有值都属于 str 类型。
为了解决这个问题,我写了这个函数:
def format_nombre(df):
for i in range(length):
for j in range(width):
element = df.iloc[i,j]
if (type(element) != type(df.iloc[1,0])):
a = df.iloc[i,j].replace(".","")
b = float(a.replace(",","."))
df.iloc[i,j] = b
基本上,我选择所有行和列的每个交集,替换有问题的字符,将元素转换为浮点数,然后在数据框中替换它。 if 确保该函数不考虑日期,这些日期位于我的数据框的第一列中。
问题在于,虽然该函数完全符合我的要求,但覆盖 10 行大约需要 1 分钟,因此转换我的 csv 需要不到 60 小时。
我意识到这远未得到优化,但我苦苦挣扎,未能找到适合我的需求和(稀缺)技能的方法。
【问题讨论】:
-
你的 csv 中的分隔符是什么?例如,如果它不是逗号,那么以下内容将起作用
pd.read_csv(your_file, thousands='.', decimal=',', sep=some_separator) -
还包括问题中文件的前 5-6 行以及您尝试构建的 DF 格式。
-
我已经尝试过了,但它不起作用,',' 仍然存在,因此我以后无法将其转换为浮点数。
-
Mohammad 你所说的“df 格式”是什么意思?这个想法是从字符串开始,然后修改它们以将它们变成浮点数。
标签: python loops csv pandas dataframe