前提
2つのcsvの比較を行いたいです。
このcsvデータは以下の特徴があります。
①ランダムにデータの文頭文末に空白が入っている
②数値の桁数が揃っていない
例)dataframe1
1, みかん,300, 18.00
2,りんご, 100,32.50
dataframe2
1 ,みかん, 300, 18.0
2,りんご , 100, 32.5
データを比較するにあたりデータ加工を行います。
まずは①部分をそろえるため、csvを文字列で読込んだ後にデータの前後の空白を削除しました。
次に数字(データ型は文字列)の桁数をそろえるために
re.subを使用し正規表現でマッチしたした箇所を置換しようとしましたが、想定通りに動きません。また dataframe.applymap('{:.1f}'.format(***))のように記載できるかとも思いましたが、***に記載する項目が分かりませんでした。
どなたかアドバイス願えますでしょうか。
実現したいこと
加工前)
dataframe1
1, みかん,300, 18.00
2,りんご, 100,32.50
dataframe2
1 ,みかん, 300, 18.0
2,りんご , 100, 32.5
加工後)データの空白削除、桁数揃え
dataframe1
1,みかん,300,18.0
2,りんご,100,32.5
dataframe2
1,みかん,300,18.0
2,りんご,100,32.5
該当のソースコード
Python
1df1 = pd.read_csv(filepath1, header=0, dtype=str, na_filter=False) 2df2 = pd.read_csv(filepath2, header=0, dtype=str, na_filter=False) 3df1.reset_index(drop=True, inplace=True) 4df2.reset_index(drop=True, inplace=True) 5df1 = df1.applymap(str.strip) #空白削除 6df2 = df2.applymap(str.strip) #空白削除 7 8df1= df1.applymap(lambda x: re.sub(r'.[0-9]0', r'.[0-9]', x)) 9df2= df2.applymap(lambda x: re.sub(r'.[0-9]0', r'.[0-9]', x))
実行結果
dataframe1
1,みかん,300,18.[0-9]
2,りんご,100,32.[0-9]
dataframe2
1,みかん,300,18.0
2,りんご,100,32.5
Python初心者のため、初歩的な質問でしたら申し訳ございません。
宜しくお願い致します。