繁体   English   中英

csv文件在以浮点数编写时提供字符串

[英]csv file gives strings when writing in floats

我的csv文件如下所示:

"(-0.16192019, -0.007456851, 0.08841695)","(-0.10439591, 0.024501082, 0.12783173)","(-0.05965481, 0.049002163, 0.12144014)",...

但我不要引号

我写的功能为:

for j in range(len(sensor_data)):
    with open(names[j] + "P" + str(i) + ".csv", "wb") as f:
        writer = csv.writer(f)
        writer.writerows(sensor_data[j])

我的sensor_data[j]像这样:

gyro.append((float(merge.iloc[j, 2]), float(merge.iloc[j, 3]), float(merge.iloc[j, 4]))) if merge.iloc[j, 0] == 'Gyroscope' \
             else acc.append((float(merge.iloc[j, 2]), float(merge.iloc[j, 3]), float(merge.iloc[j, 4])))

为什么不打印浮点元组而不是字符串元组?

merge = pd.read_csv(final_user_study_path + "/P" + str(i) + "/DataCollection/data/merge.csv")

合并看起来像:

Gyroscope,50958,-0.3387541,0.014913702,0.05965481
Gyroscope,50978,-0.23009712,0.03621899,0.044741105
LinearAcceleration,50979,-0.09891046,0.119261175,-0.108936176
Gyroscope,50998,-0.1768339,0.066046394,0.040480047
LinearAcceleration,50999,-0.0863409,0.18240824,-0.07152677

所有这些值的类型都是字符串。

我想要:

(-0.16192019, -0.007456851, 0.08841695),(-0.10439591, 0.024501082, 0.12783173),(-0.05965481, 0.049002163, 0.12144014),...

若要停止csv.writer()在需要时添加引号(因为它在单元格中发现了定界符),请添加quoting参数,如下所示:

writer = csv.writer(f, quoting=csv.QUOTE_NONE)

请参阅CSV文档: csv.QUOTE_NONE

但是,最好拆开元组的包装,以便它们各自正确地获得自己的单元格而没有任何多余的括号。 这可以使用itertools.chain.from_iterable() ,将所有元组折叠到一个列表中。 例如:

from itertools import chain

row = [(-0.16192019, -0.007456851, 0.08841695), (-0.10439591, 0.024501082, 0.12783173), (-0.05965481, 0.049002163, 0.12144014)]

print row
print list(chain.from_iterable(row))

这将显示:

[(-0.16192019, -0.007456851, 0.08841695), (-0.10439591, 0.024501082, 0.12783173), (-0.05965481, 0.049002163, 0.12144014)]
[-0.16192019, -0.007456851, 0.08841695, -0.10439591, 0.024501082, 0.12783173, -0.05965481, 0.049002163, 0.12144014]

如您所见,第二行显示所有元组均已展平为一个列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM