【问题标题】:Removing round brackets from a dataframe of lat/lon pairs从纬度/经度对的数据框中删除圆括号
【发布时间】:2016-09-10 02:51:08
【问题描述】:

我确信这是一件非常简单的事情,但我似乎遇到了麻烦! (我对此也很陌生。)

我有一个包含经纬度坐标的数据框:

    LatLon
0   (49.766795012580374, -7.556440128791576)
1   (49.766843444728075, -7.556439417755133)
2   (49.766843444728075, -7.556439417755133)

我想删除圆括号/圆括号,但我无法解决。

我不断收到类似的错误

AttributeError: Can only use .str accessor with string values, which use np.object_ dtype in pandas

但我不知道如何修复它。

我认为这是因为类型是对象 - 所以我需要先将其转换为字符串?

如果我这样做.info():

<class 'pandas.core.frame.DataFrame'>
Int64Index: 22899 entries, 0 to 22898
Data columns (total 1 columns):
LatLon    22899 non-null object
dtypes: object(1)

df.dtypes:

LatLon    object
dtype: object

【问题讨论】:

  • 去掉括号是什么意思?您只想打印列表的内容,而不打印它们?或者也许保存到文件?因为为了将所有这些元组完全保存在内存中,您需要括号或圆括号..
  • 我会删除这个问题,并写一个新问题,明确表示您正在使用pandas(标签)。跳过ipython 标签。并告诉你正在尝试做什么(打印、str、写入文件等)。它甚至可能有助于展示您是如何创建数据框的,因此我们可以重新创建它并演示如何显示它。请记住,从数据帧本身中删除字符与显示没有这些字符的数据之间存在重大区别。
  • 我打算删除这个问题,但它不会让我这样做。我添加了更多细节,是的,我想删除括号,而不仅仅是不显示它们。
  • 创建数据框时出现问题:您有一个元组数据框。您可以通过 dtype 被列为 object 来判断它是元组。重新审视你是如何创建数据框的,以便没有元组,而是有一个浮点数据框。
  • 请查看更新后的答案。

标签: python pandas dataframe


【解决方案1】:

有了更新的问题,这里是更新的答案。

假设我们有这个元组列表:

>>> li
[(49.766795012580374, -7.556440128791576), (49.766843444728075, -7.556439417755133), (49.766843444728075, -7.556439417755133)]

我们可以直接创建一个数据框(基本上是一个矩阵或列表的列表):

>>> df1=pd.DataFrame(li)
>>> df1
           0         1
0  49.766795 -7.556440
1  49.766843 -7.556439
2  49.766843 -7.556439
>>> df1.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 3 entries, 0 to 2
Data columns (total 2 columns):
0    3 non-null float64
1    3 non-null float64
dtypes: float64(2)
memory usage: 72.0 bytes

请注意,这是一个 2 列的浮点数据框。

但是,现在想象一下我们有这个列表,它是一个元组列表的列表:

>>> li2
[[(49.766795012580374, -7.556440128791576)], [(49.766843444728075, -7.556439417755133)], [(49.766843444728075, -7.556439417755133)]]

如果您在这里创建一个数据框,您将获得示例中的内容:

>>> df2=pd.DataFrame(li2)
>>> df2
                                 0
0  (49.7667950126, -7.55644012879)
1  (49.7668434447, -7.55643941776)
2  (49.7668434447, -7.55643941776)
>>> df2.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 3 entries, 0 to 2
Data columns (total 1 columns):
0    3 non-null object
dtypes: object(1)

这是一列元组数据框。

所以我猜你的问题出在数据框的初始创建中。您的原始数据不是列表列表或元组列表,而是具有元组列表(或元组列表等)...

解决方法(如果我是正确的)是将源列表平展一层:

>>> pd.DataFrame(t for sl in li2 for t in sl)
           0         1
0  49.766795 -7.556440
1  49.766843 -7.556439
2  49.766843 -7.556439

【讨论】:

  • 感谢您的回答,抱歉,我已将问题从列表稍微更改为数据框!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-04
  • 2013-06-06
  • 1970-01-01
  • 1970-01-01
  • 2018-08-16
相关资源
最近更新 更多