Python 将字符串转换为数据帧中的数字
背景: 我从谷歌地图中获得了一个点列表,提取数据作为csv。在Pandas中清理它,并将其导出为JSON文件。(用于出口的记录) 问题: 坐标是字符串。这是有意义的,因为最初,坐标与url绑定在一起Python 将字符串转换为数据帧中的数字,python,pandas,dataframe,data-cleaning,data-conversion,Python,Pandas,Dataframe,Data Cleaning,Data Conversion,背景: 我从谷歌地图中获得了一个点列表,提取数据作为csv。在Pandas中清理它,并将其导出为JSON文件。(用于出口的记录) 问题: 坐标是字符串。这是有意义的,因为最初,坐标与url绑定在一起 Example: https://www.google.com/maps/search/{coordinates} 我使用replace函数清除文本,只保留坐标。是否有办法将“我的位置”列中的值设置为数字类型,并将其放入列表中 示例导出的JSON文件的模型数据: [ { "B
Example: https://www.google.com/maps/search/{coordinates}
我使用replace函数清除文本,只保留坐标。是否有办法将“我的位置”列中的值设置为数字类型,并将其放入列表中
示例导出的JSON文件的模型数据:
[
{
"Bin":"Yes",
"Location":"##.##,-###.##"
},
我试图清理数据,使其看起来像下面的示例
我试图建模的GeoJSON文件的示例
[
{
location: [41.8781, -87.6298],
city: "Chicago"
},
目标:
我正在尝试制作一个自定义地图,以便在mapbox中使用
示例我的数据帧外观模型
Bin Location
0 Yes ##.##,-###.##
1 Yes ##.##,-###.##
输入:df.types
Output:
Bin object
Location object
dtype: object
谢谢您的帮助。您需要将数字作为单独的列存储在位置中(我假设这些是lat/long坐标),以便将它们视为数字,并按照您的预期工作。理想情况下,您应该更改json清理代码,以在将其读入数据帧之前返回如下结果:
{
lat: 41.8781,
long: -87.6298,
city: "Chicago"
}
但是,您也可以在数据帧中解决此问题:
json_data = [
{"location": [41.8781, -87.6298], "city": "chicago"},
{"location": [44.8141, 20.1234], "city": "somewhere"}
]
df = pd.DataFrame.from_records(json_data)
print(df)
location city
0 [41.8781, -87.6298] chicago
1 [44.8141, 20.1234] somewhere
print(df.dtypes)
location object
city object
dtype: object
应用我们的转型:
df[["lat", "long"]] = pd.DataFrame(df["location"].tolist(), columns=["lat", "long"])
print(df)
location city lat long
0 [41.8781, -87.6298] chicago 41.8781 -87.6298
1 [44.8141, 20.1234] somewhere 44.8141 20.1234
print(df.dtypes)
location object
city object
lat float64
long float64
dtype: object
我们只是告诉熊猫,我们的“位置”列实际上有两个值,它们应该在单独的列中。我们将其展开,并将其添加回原始数据帧
如果出于任何原因,pandas没有自动将lat/long列解析为浮点,则可以使用pd.to\u numeric
将对象列转换为整数/浮点数据类型
df["lat"] = pd.to_numeric(df["lat"])
df["long"] = pd.to_numeric(df["long"])
print(df)
location city lat long
0 [41.8781, -87.6298] chicago 41.8781 -87.6298
1 [44.8141, 20.1234] somewhere 44.8141 20.1234
print(df.dtypes)
location object
city object
lat float64
long float64
dtype: object
你的代码在哪里?我没有将JSON文件读入我的数据帧。我从一个CSV文件开始,然后清理数据并将其导出到一个JSON文件,但是感谢您的回复,这真的很有帮助。我打算用你的方法再试一次。我感谢你的深入回复,真的很好!问题是,是否要将lat和long结合起来,并保持float64格式?我尝试了list(zip(df.lat,df.long)),但我的组合zip使它再次成为一个对象。不幸的是,没有。当你把这些数字压缩在一起,你最终会把它们变成一列元组。由于列中的值是元组,pandas无法确定它们是否为浮点,因为它只能“看到”元组,而不是其中的数字。出于好奇,你为什么想让他们在一起?我明白了,谢谢你的跟进。我想把它们放在一起,这样当我调用javascript文件中的坐标时,我可以把它称为:L.marker(city.location)(使用传单)啊,我从未接触过传单。但是,是否可以基于以下内容执行类似的操作:
L.marker({“lat”:city.lat,“lon”:city.lon})
。或者,您可以尝试通过