"Date"
という列を持つデータフレームがあり、この列のすべての値が同じ値(年のみ)を持つようにします。例:
City Date
Paris 01/04/2004
Lisbon 01/09/2004
Madrid 2004
Pekin 31/2004
私が欲しいのは:
City Date
Paris 2004
Lisbon 2004
Madrid 2004
Pekin 2004
ここに私のコードがあります:
fr61_70xls = pd.ExcelFile('AMADEUS FRANCE 1961-1970.xlsx')
#Here we import the individual sheets and clean the sheets
years=(['1961','1962','1963','1964','1965','1966','1967','1968','1969','1970'])
fr={}
header=(['City','Country','NACE','Cons','Last_year','Op_Rev_EUR_Last_avail_yr','BvD_Indep_Indic','GUO_Name','Legal_status','Date_of_incorporation','Legal_status_date'])
for year in years:
# save every sheet in variable fr['1961'], fr['1962'] and so on
fr[year]=fr61_70xls.parse(year,header=0,parse_cols=10)
fr[year].columns=header
# drop the entire Legal status date column
fr[year]=fr[year].drop(['Legal_status_date','Date_of_incorporation'],axis=1)
# drop every row where GUO Name is empty
fr[year]=fr[year].dropna(axis=0,how='all',subset=[['GUO_Name']])
fr[year]=fr[year].set_index(['GUO_Name','Date_of_incorporation'])
たとえば、fr['1961']
と呼ばれるDataFramesでは、Date_of_incorporation
の値は何でもかまいません(文字列、整数など)。したがって、これを完全に消去することをお勧めします。列を作成し、年のみを含む別の列をDataFramesに追加しますか?
@DSMが指摘しているように、 ベクトル化された文字列メソッド を使用して、これをより直接行うことができます。
df['Date'].str[-4:].astype(int)
または、extractを使用します(各文字列のどこかに長さ4の数字のセットが1つしかないと仮定):
df['Date'].str.extract('(?P<year>\d{4})').astype(int)
もう少し柔軟な方法として、 apply
(または同等に map
)を使用してこれを行うこともできます。
df['Date'] = df['Date'].apply(lambda x: int(str(x)[-4:]))
# converts the last 4 characters of the string to an integer
ラムダ関数は、Date
から入力を取得し、それを年に変換しています。
次のように、これをより冗長に書くことができます(おそらくそうすべきです)。
def convert_to_year(date_in_some_format);
date_as_string = str(date_in_some_format)
year_as_string = date_in_some_format[-4:] # last four characters
return int(year_as_string)
df['Date'] = df['Date'].apply(convert_to_year)
おそらく「Year」がこの列のより良い名前です...
apply
を使用して列変換を行うことができます
クリーン関数を定義して、ドルとコンマを削除し、データを浮動小数点に変換します。
def clean(x):
x = x.replace("$", "").replace(",", "").replace(" ", "")
return float(x)
次に、このように列で呼び出します。
data['Revenue'] = data['Revenue'].apply(clean)
または、lambda
関数でapply
関数を使用する場合:
data['Revenue']=data['Revenue'].apply(lambda x:float(x.replace("$","").replace(",", "").replace(" ", "")))