在python中将具有不同数据类型的pandas数据框导出到csv

Posted

技术标签:

【中文标题】在python中将具有不同数据类型的pandas数据框导出到csv【英文标题】:Export pandas dataframe with different data types to csv in python 【发布时间】:2017-10-06 08:33:49 【问题描述】:

我有一个 gps 参数数据框,其中包含不同类型的数据(整数、对象、浮点数和字符串),如下所示:

  ID              time                speed pdop longitude latitude
0 356363050613605 2017-02-20T17:04:40 210 3.051 8.81640 44.75045
1 356363050637620 2017-02-21T13:44:38 172 60.00 9.41286 45.48268

然后通过使用 geopy 包,我使用以下代码将纬度和经度坐标解析为地理位置

import geopy
from geopy.geocoders import Nominatim
geolocator = Nominatim()

def f(row):
   loc = str(row['latitude']) + ',' +str(row['longitude'])
   locations = geolocator.reverse(loc)
   return location

df['address'] = df.apply(lambda row: f(row), axis=1)

将地址列返回到数据框,其中包含完整地址和坐标作为字符串。

  ID              time                speed pdop longitude latitude address
0 356363050613605 2017-02-20T17:04:40 210 3.051 8.81640 44.75045 (Viale del Lavoro, Zona Industriale C.I.P.I.A.N., Novi Ligure, AL, PIE, 15067, Italia), (44.7524715, 8.8122644)
1 356363050637620 2017-02-21T13:44:38 172 60.00 9.41286 45.48268 (Strada Provinciale 14 Rivoltana, Liscate, MI, LOM, 20066, Italia), (45.4821247, 9.4118136)

现在的问题是我正在尝试使用 "df.to_csv('output.csv')" 将数据帧导出到 csv 文件,但它一直返回以下错误:

TypeError: str 返回非字符串(NoneType 类型)

我什至尝试过以下代码,该代码仅在指定返回地址列时起作用,如下所示:

with open('outpu.csvt', 'w') as file:
    a = csv.writer(file)
    data = df['address']
    a.writerows(data)

当尝试导出整个数据框时,它会返回一个空文件。任何帮助如何将整个数据框导出到 csv 文件??

【问题讨论】:

df.dtypes 显示的是您列的数据类型? 我猜你不需要第二组坐标。可以放弃那些吗?其中一个问题可能是 pandas 正在将其作为另一列阅读。 如果你写成xlsx,你会得到同样的错误吗?可能是因为您在 address 列中的值有逗号吗? @Kickaha 对象、float64 和 int64 @pshep123 听起来很合理。关于如何丢弃它的任何想法? 【参考方案1】:

我根本不熟悉地理定位器,但您的函数似乎正在返回一个元组列表(或元组)。如果您改为返回类似以下内容:

return ','.join(location[0])

这应该将单个字符串返回到您的 address 列,该列应该很容易写入 csv。

【讨论】:

我刚刚尝试过,它给我留下了以下错误:“TypeError: ('can only join an iterable', 'occured at index 0')” 好的,也许它已经是一个字符串了。然后只需使用return location[0] 看看会发生什么。 现在它运行良好。感谢您的支持

以上是关于在python中将具有不同数据类型的pandas数据框导出到csv的主要内容,如果未能解决你的问题,请参考以下文章

Python Pandas - 如何在具有不同级别数的索引上加入 DataFrames?

在python pandas df中将月份数转换为名称

如何使用 pandas 或 python 将具有数百万行的表从 PostgreSQL 复制到 Amazon Redshift

Python Pandas - 连接两个具有不同行数和列数的数据框

在 Python 中将具有不同类型的项目列表作为字符串加入

在 python pandas 中将级别附加到列索引