使用 pandas 数据框将坐标字符串拆分为 X 和 Y 列

Posted

技术标签:

【中文标题】使用 pandas 数据框将坐标字符串拆分为 X 和 Y 列【英文标题】:Splitting a coordinate string into X and Y columns with a pandas data frame 【发布时间】:2020-12-13 07:46:01 【问题描述】:

所以我创建了一个 pandas 数据框,显示事件的坐标和这些坐标出现的次数,并且坐标显示在这样的字符串中。

      Coordinates  Occurrences   x
0     (76.0, -8.0)           1   0
1   (-41.0, -24.0)           1   1
2     (69.0, -1.0)           1   2
3     (37.0, 30.0)           1   3
4     (-60.0, 1.0)           1   4
..             ...         ...  ..
63  (-45.0, -11.0)           1  63
64    (80.0, -1.0)           1  64
65    (84.0, 24.0)           1  65
66     (76.0, 7.0)           1  66
67   (-81.0, -5.0)           1  67

我想创建一个新的数据框,分别显示 x 和 y 坐标,并像这样显示它们的出现--

 x    Occurrences y  Occurrences
    76      ...     -8       ...
   -41      ...     -24      ...
    69      ...     -1       ...
    37      ...     -30      ...
    60      ...      1       ...

我试图拆分字符串,但我认为我做的不正确,也不知道如何将它添加到表中——我想我以后必须做类似 for 循环的事情在我的代码中——我从 API 中抓取数据,这里是设置显示的数据框的代码。

for key in contents['liveData']['plays']['allPlays']:
    # for plays in key['result']['event']:
        # print(key)
    if (key['result']['event'] == "Shot"):
        #print(key['result']['event'])
        scoordinates = (key['coordinates']['x'], key['coordinates']['y'])
        if scoordinates not in shots:
            shots[scoordinates] = 1
        else:
            shots[scoordinates] += 1
    if (key['result']['event'] == "Goal"):
        #print(key['result']['event'])
        gcoordinates = (key['coordinates']['x'], key['coordinates']['y'])
        if gcoordinates not in goals:
            goals[gcoordinates] = 1
        else:
            goals[gcoordinates] += 1     
            
#create data frame using pandas
gdf = pd.DataFrame(list(goals.items()),columns = ['Coordinates','Occurences'])
print(gdf)
sdf = pd.DataFrame(list(shots.items()),columns = ['Coordinates','Occurences'])
print()

【问题讨论】:

【参考方案1】:

试试这个

import re
df[['x', 'y']] = df.Coordinates.apply(lambda c: pd.Series(dict(zip(['x', 'y'], re.findall('[-]?[0-9]+\.[0-9]+', c.strip())))))

【讨论】:

【参考方案2】:

使用内置的字符串方法来实现这一点应该是高性能的:

df[["x", "y"]] = df["Coordinates"].str.strip(r"[()]").str.split(",", expand=True).astype(np.float)

(这也将 x,y 转换为浮点值,尽管可能不需要)

【讨论】:

以上是关于使用 pandas 数据框将坐标字符串拆分为 X 和 Y 列的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark 数据框将 json 列值拆分为***多列

Pandas 数据框将数据聚合为每组的计数

pandas 数据框将 INT64 列转换为布尔值

Pandas 数据框将特征划分为高相关性组

Python pandas数据框将2行合并为1行

根据观察名称将数据拆分为训练和使用 pandas 进行测试