Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将字符串转换为数据帧中的数字_Python_Pandas_Dataframe_Data Cleaning_Data Conversion - Fatal编程技术网

Python 将字符串转换为数据帧中的数字

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

背景: 我从谷歌地图中获得了一个点列表,提取数据作为csv。在Pandas中清理它,并将其导出为JSON文件。(用于出口的记录)

问题: 坐标是字符串。这是有意义的,因为最初,坐标与url绑定在一起

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})
。或者,您可以尝试通过