我有一个包含这样的列的csv文件
这就是我尝试过的(以下代码中的数据与上面的csv数据相同)并且无法正常工作
data = [{"latlong":'{lat: 15.85173248 , lng: 78.6216129},{lat: 15.85161765 , lng: 78.61982138},{lat: 15.85246304 , lng: 78.62031075},{lat: 15.85250474 , lng: 78.62034441},{lat: 15.85221891 , lng: 78.62174507},', "Id": 1},
{"latlong": '{lat: 15.8523723 , lng: 78.62177758},{lat: 15.85236637 , lng: 78.62179098},{lat: 15.85231281 , lng: 78.62238316},{lat: 15.8501259 , lng: 78.62201676},', "Id":2}]
df = pd.DataFrame(data)
df
df.latlong.apply(pd.Series)
这适用于这种情况
data1 = [{'latlong':[15.85173248, 78.6216129, 1]},{'latlong': [15.85161765, 78.61982138, 1]},{'latlong': [15.85246304, 78.62031075, 1]},
{'latlong': [15.85250474, 78.62034441, 1]}, {'latlong': [15.85221891, 78.62174507, 1]},{'latlong': [15.8523723, 78.62177758, 2]},
{'latlong': [15.85236637, 78.62179098, 2]}, {'latlong': [15.85231281, 78.62238316, 2]},{'latlong': [15.8501259,78.62201676, 2]}]
df1 = pd.DataFrame(data1)
df1
df1 = df1['latlong'].apply(pd.Series)
df1.columns = ['lat', 'long', 'Id']
df1
如何使用Python实现这一目标?
python新手。我尝试了以下链接...无法理解如何将其应用于我的案例。 Splitting dictionary/list inside a Pandas Column into Separate Columns
答案 0 :(得分:0)
你的数据是一种非常奇怪的格式...... latlong
的条目实际上并不是有效的JSON(末尾有一个尾随的逗号,并且字段名称周围没有引号),所以我可能实际上使用正则表达式来拆分列,并使用列表解析来拆分行:
In [39]: pd.DataFrame(
[{'Id':r['Id'], 'lat':lat, 'long':long}
for r in data
for lat,long in re.findall("lat: ([\d.]+).*?lng: ([\d.]+)",
r['latlong'])])
Out[39]:
Id lat long
0 1 15.85173248 78.6216129
1 1 15.85161765 78.61982138
2 1 15.85246304 78.62031075
3 1 15.85250474 78.62034441
4 1 15.85221891 78.62174507
5 2 15.8523723 78.62177758
6 2 15.85236637 78.62179098
7 2 15.85231281 78.62238316
8 2 15.8501259 78.62201676