2
I持ってcsvファイルに次のデータ:*と*位置データフレーム内の特定の位置に新しい列
from StringIO import StringIO
import pandas as pd
the_data = """
ABC,2016-6-9 0:00,95,"{'//PurpleCar': [115L], '//YellowCar': [403L]}","{'GBP/NOK PAWS': [151L], 'CAD/EUR': [41L], 'EDM8-EDM9': [1833L]}"
ABC,2016-6-10 0:00,100,"{'//PurpleCar': [219L], '//YellowCar': [381L]}","{'FBTPM5 2015-06-08': [472L], 'HKD/MXN': [0L], 'AUD/SEK DEWS': [19482L]}"
ABC,2016-6-11 0:00,27,"{'//PurpleCar': [572L], '//YellowCar': [184L]}","{'V 2.000 03/31/25': [759L], 'AUD/JPY': [742L], 'AUD/SEK PAWS': [1784L]}"
ABC,2016-6-12 0:00,41,"{'//PurpleCar': [80L], '//YellowCar': [2011L]}","{'CAR/FIN SWAP': [151L], 'HKD/MXN': [41L], 'RU4': [5829L]}"
ABC,2016-6-13 0:00,19,"{'//PurpleCar': [32L], '//YellowCar': [15L]}","{'TRY/CHY OIS': [673L], 'NZD/MXN': [582L], 'AUD/SEK PAPS': [4846242L]}"
DEF,2016-6-9 0:00,8,"{'//PurpleCar': [19L], '//BlackCar': [17L]}","{'ULM5-ULU5 2015-06-19': [18L], 'HKD/MXN': [64L], 'USD/JPY OPTS': [14714L]}"
DEF,2016-6-10 0:00,2,"{'//PurpleCar': [32L], '//BlackCar': [15L]}","{'U 4.500 2/15/14': [151L], 'FVU6-FVZ6 2016-09-30': [194], 'AUD/SEK': [0L]}"
DEF,2016-6-11 0:00,20,"{'//PurpleCar': [32L], '//BlackCar': [15L]}","{'EUR/JPY': [158L], 'ARS/MXN': [562L], 'GBP/JPY PAWS': [1759L]}"
DEF,2016-6-12 0:00,241,"{'//PurpleCar': [28L], '//BlackCar': [96L]}","{'GBP/NOK OIS': [319], 'HKD/SAG': [103L], 'USD/INR': [3L]}"
DEF,2016-6-13 0:00,400,"{'//PurpleCar': [32L], '//BlackCar': [15L]}","{'TNM6 2016-06-21': [193], 'EDH9': [1713L], 'GZ5': [0]}"
"""
として、我々は、そこに二重引用符内の2つの辞書があり、カンマで区切られたこのデータセットの最初の行から見ることができます:
"{'//PurpleCar': [115L], '//YellowCar': [403L]}"
と
"{'GBP/NOK PAWS': [151L], 'CAD/EUR': [41L], 'EDM8-EDM9': [1833L]}"
次のように私はその後の辞書自体は可変長であるという事実に対処するために、データフレームを操作し、キー値は動的です:
fixed_columns = pd.read_csv(StringIO(the_data),
names=["Company", "Date", "Value", "Cars_str",
"Currency_str"])
cars = fixed_columns["Cars_str"].apply(ast.literal_eval)
del fixed_columns["Cars_str"]
currencies = fixed_columns["Currency_str"].apply(ast.literal_eval)
del fixed_columns["Currency_str"]
def get_single_item(list_that_always_has_single_item):
v, = list_that_always_has_single_item
return v
def extract_car_name(car_str):
assert car_str.startswith("//"), car_str
return car_str[2:]
def extract_instrument_name(currency_str):
assert currency_str.startswith(""), currency_str
return currency_str[2:]
dynamic_column_01 = cars.apply(
lambda x: pd.Series({
extract_car_name(k): get_single_item(v)
for k, v in x.items()
}))
dynamic_column_02 = currencies.apply(
lambda x: pd.Series({
extract_instrument_name(k): get_single_item(v)
for k, v in x.items()
}))
result = pd.concat([fixed_columns, dynamic_column_01, dynamic_column_02], axis=1)
result
私の質問:私はなりたいですValue
列を取ることができ、それに一定の係数を掛けて、新しい列をValue
列の直後(および最初の辞書の直前)に配置します。これを行う方法はありますか?
ありがとうございます!新しい列はあなたが解析されてきた直後fixed_columns
からMultipliedValue
を計算することによって、最後に配置し、Cars_str
とCurrency_str
列を削除されます
、ありがとうございました! – equanimity