从lat / lon对的数据框中删除圆括号

时间:2016-09-10 02:51:09

标签: python pandas dataframe

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

我有一个包含lat长坐标的数据框:

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

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

我一直收到像

这样的错误
  

AttributeError:只能使用带有字符串值的.str访问器,它在pandas中使用np.object_ dtype

但我不知道如何解决它。

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

如果我.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

1 个答案:

答案 0 :(得分: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