Python 行中的列表元素

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

我有几个多边形和一些点到这些多边形的距离。我试着用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    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