Python 行中的列表元素
我有几个多边形和一些点到这些多边形的距离。我试着用pandas编写的csv,其中每个点和多边形之间的距离将以单独的行显示。我明白了:Python 行中的列表元素,python,csv,pandas,Python,Csv,Pandas,我有几个多边形和一些点到这些多边形的距离。我试着用pandas编写的csv,其中每个点和多边形之间的距离将以单独的行显示。我明白了: poly total inside outside dist 1000 2 0 2 [16015,5678] 1100 1 0 1 [5267] 我想变得像: poly total inside outside dist 1000 2 0 2 16015 1000 2
poly total inside outside dist
1000 2 0 2 [16015,5678]
1100 1 0 1 [5267]
我想变得像:
poly total inside outside dist
1000 2 0 2 16015
1000 2 0 2 5678
1100 1 0 1 5267
在看了前面的q之后,我尝试了以下方法[
但是它在csv中给了我同样的结果。非常感谢您的帮助。创建数据帧:
import pandas as pd
import numpy as np
df= pd.DataFrame({
'poly':[1000,1100],
'total':[2,1],
'inside':[0,0],
'outside':[2,1],
'dist':[[16015,5678],[5267]]
})
df = df[['poly','total','inside','outside','dist']]
df
Out[]:
poly total inside outside dist
0 1000 2 0 2 [16015, 5678]
1 1100 1 0 1 [5267]
处理
new_df = pd.DataFrame({
col:np.repeat(df[col].values, df['dist'].str.len())
for col in df.columns.difference(['dist'])
}).assign(**{'dist':np.concatenate(df['dist'].values)})[df.columns.tolist()]
new_df
Out[]:
poly total inside outside dist
0 1000 2 0 2 16015
1 1000 2 0 2 5678
2 1100 1 0 1 5267
您可以使用来获取列表的长度,这些列表由with和original列重复:
from itertools import chain
s = pd.Series(list(chain.from_iterable(df.dist)),
index=np.repeat(df.index.values, df.pop('dist').str.len())).rename('dist')
print (s)
0 16015
0 5678
1 5267
Name: dist, dtype: int64
print (df.join(s).reset_index(drop=True))
poly total inside outside dist
0 1000 2 0 2 16015
1 1000 2 0 2 5678
2 1100 1 0 1 5267
另一个解决方案包括:
我有一个解决办法
df2=df.fillna(0)
s=df2.apply(λx:pd.Series(x[‘距离’]),axis=1.stack().reset_index(level=1,drop=True)
s、 name=“距离”
df3=df2。下降(“距离”,轴=1)。连接
它看起来像:
在这里输入代码
32811 253 221 32 20
32811 253 221 32 3015
32811 253 221 32 2010
谢谢你的帮助。如果你能给我一个错误的解决方案,我将不胜感激:“ValueError:long()无效,以10为基数:”[160155678]”。我只是另一个线程()。尝试后会告诉你。谢谢。得到错误消息##TypeError:无法将数组数据从dtype('int64')转换为dtype('int32'))根据“安全”规则###我也尝试了。但得到的表与我的输入表相同。zip Total/in/out/distance 0 77379/2/0/2/[160155678]……177380/1/0/1/[5267]df=df.astype(np.intp)在处理节之前尝试运行此命令。我得到错误:ValueError:long()的无效文本,以10为基数:'[160155678]'谢谢。看起来我的是在32位平台上。得到错误消息###TypeError:无法根据规则'safe'###将数组数据从dtype('int64')转换为dtype('int32')。我如何将64存储到32?似乎是一些小错误,不幸的是我不知道如何模拟此错误以及如何解决它…:(
names = ['poly','total', 'inside','outside']
df = df.set_index(names)
mux = pd.MultiIndex.from_tuples(np.repeat(df.index.values, df.dist.str.len()), names=names)
df2 = pd.DataFrame({'dist':list(chain.from_iterable(df.dist))}, index=mux).reset_index()
print (df2)
poly total inside outside dist
0 1000 2 0 2 16015
1 1000 2 0 2 5678
2 1100 1 0 1 5267
32811 253 221 32 20
32811 253 221 32 3015
32811 253 221 32 2010