我敢肯定这是一件很简单的事情,但是我似乎遇到了麻烦! (我对此也很陌生。)
我有一个包含经度坐标的数据框:
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
最佳答案
关于更新的问题,这是更新的答案。
假设我们有以下元组列表:
>>> 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列的float数据框。
但是,假设现在有这个列表,它是元组列表的列表:
>>> 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