複数の年の値がセミコロンで区切られた列を含むPandas DataFrameに読み込んだCSVファイルがあります。Pandas DataFrameの文字列から最小年と最大年を抽出します
文字列から最小値と最大値を抽出し、それぞれを新しい列に保存する必要があります。
最小値と最大値を印刷できますが、新しい列に保存された各行から正しい値を取得できないようです。
ご迷惑をおかけして申し訳ありません。
サンプルデータフレームは:
ここx = df['years'].notnull()
for row in df['years'][x].str.split(pat=';'):
lst = list()
for item in row:
lst.append(int(item))
print('Min=',min(lst),'Max=',max(lst))
Min= 2000 Max= 2005
Min= 2003 Max= 2005
Min= 2015 Max= 2015
Min= 2012 Max= 2014
は、私が試した方法は次のとおりです。
id years minyear maxyear
0 1473-2262 2000; 2001; 2002; 2003; 2004; 2004; 2004; 2005 2000.0 2005.0
1 2327-9214 2003; 2004; 2005 2003.0 2005.0
2 1949-8349 2015 2015.0 2015.0
3 2375-6314 NaN NaN NaN
4 0095-6562 2012; 2014 2012.0 2014.0
は私が最小値と最大値を印刷することができます。
import pandas as pd
import numpy as np
raw_data = {'id': ['1473-2262', '2327-9214', '1949-8349', '2375-6314',
'0095-6562'],
'years': ['2000; 2001; 2002; 2003; 2004; 2004; 2004; 2005',
'2003; 2004; 2005', '2015', np.nan, '2012; 2014']}
df = pd.DataFrame(raw_data, columns = ['id', 'years'])
これは私が必要とするデータフレームであります新しい列に値を取得する:
x = df['years'].notnull()
for row in df['years'][x].str.split(pat=';'):
lst = list()
for item in row:
lst.append(int(item))
df['minyear']=min(lst)
df['maxyear']=max(lst)
最後の行の値のみが新しい列に保存されます。
id years minyear maxyear
0 1473-2262 2000; 2001; 2002; 2003; 2004; 2004; 2004; 2005 2012 2014
1 2327-9214 2003; 2004; 2005 2012 2014
2 1949-8349 2015 2012 2014
3 2375-6314 NaN 2012 2014
4 0095-6562 2012; 2014 2012 2014
私のソリューションはあなたの2倍です。あまりにも悪くはありません:) – DyZ
いいえ、ちょうど5.行の数に比例して直線的に拡大しませんか? – DyZ
@jezraelそうです。私は、なぜ、不思議です。 – DyZ