pandasで要素、行、列に関数を適用するmap, applymap, apply
In [1]:
import pandas as pd
import numpy as np
df = pd.DataFrame({'a':[11, 21, 31],
'b':[12, 22, 32],
'c':[13, 23, 33],
'd':[14, 24, 34]})
print(df)
In [2]:
In [3]:
df['col'] = ['PCB,MO(4) FH-3050の2次処理面 TO PCB,MO(1) FH-3050-1..',
'PCB,MO(4) FH-3050の2次処理面 TO PCB,MO(1) FH-3050-1..','PCB,MO(4) FH-3050の2次処理面 TO PCB,MO(1) FH-3050-1..']
s = df['col'].map(lambda x: str(x).rpartition(' TO ')[0])
print(s)
#print(s.map(lambda x: str(x).rpartition(' TO ')[0]))
In [4]:
s = 'PCB,MO(4) FH-3050の1次処理面 TO PCB,MO(4) FH-3050の2次処理面'
df['col'] = [s, s, s]
print(s.find('の'))
print(s[:s.find('の')])
#def f_str(s):
# return str(s)[:s.find('PCB,MO(4) FH-3050', s.find('TO'))] + s[s.find('PCB,MO(4) FH-3050', s.find('TO')) + len('PCB,MO(4) FH-3050')+1:]
s = df['col'].map(lambda s: str(s)[:s.find(s[:s.find('の')], s.find('TO'))]
+ s[s.find(s[:s.find('の')], s.find('TO')) + len(s[:s.find('の')])+1:])
print(s)
#s[:s.find('PCB,MO(4) FH-3050', s.find('TO'))] + s[s.find('PCB,MO(4) FH-3050', s.find('TO')) + len('PCB,MO(4) FH-3050')+1:]
In [5]:
s = 'PCB,MO(4) FH-3050の1次処理面 TO PCB,MO(1) FH-3050-1の2次処理面'
df['col'] = [s, s, s]
s = df['col'].map(lambda s: str(s).replace('次処理',''))
print(s)
In [6]:
df = pd.DataFrame({'a':[11, 21, 31],
'b':[12, 22, 32],
'c':[13, 23, 33],
'd':[14, 24, 34]})
f_oddeven = lambda x: 'odd' if x % 2 == 1 else 'even'
print(df.applymap(f_oddeven))
In [7]:
f_maxmin = lambda x: max(x) - min(x)
print(df.apply(f_maxmin))
print(df.apply(f_maxmin, axis=1))
In [8]:
df['b'] = df['b'].map(f_str)
print(df)
df.iloc[2] = df.iloc[2].map(f_str)
print(df)