Python 如何编写熊猫中每次迭代后生成的新列
我有38列,我正在一个接一个地预处理。每列的结果必须写入csv文件。每次我运行代码时,只有最后处理的列是用csv编写的。如何使用pandas将每个列逐个添加到输出文件中 这是我的密码: def最小值和最大值(我的数据1):Python 如何编写熊猫中每次迭代后生成的新列,python,pandas,Python,Pandas,我有38列,我正在一个接一个地预处理。每列的结果必须写入csv文件。每次我运行代码时,只有最后处理的列是用csv编写的。如何使用pandas将每个列逐个添加到输出文件中 这是我的密码: def最小值和最大值(我的数据1): min_max(my_data1)我认为您不需要循环,最好使用pandas函数和and: 样本: np.random.seed(100) my_data1 = pd.DataFrame(np.random.randint(10, size=(3,5))) print (my_
min_max(my_data1)我认为您不需要循环,最好使用pandas函数和and: 样本:
np.random.seed(100)
my_data1 = pd.DataFrame(np.random.randint(10, size=(3,5)))
print (my_data1)
0 1 2 3 4
0 8 8 3 7 7
1 0 4 2 5 2
2 2 2 1 0 8
In [334]: %timeit min_max(my_data1)
18.8 ms ± 257 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [335]: %timeit my_data1.sub(my_data1.min(axis=0)).div(my_data1.max(axis=0).sub(my_data1.min(axis=0)))
2.2 ms ± 39.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
我的解决方案是:
a = my_data1.sub(my_data1.min(axis=0))
b = my_data1.max(axis=0).sub(my_data1.min(axis=0))
df = a.div(b)
print (df)
0 1 2 3 4
0 1.00 1.000000 1.0 1.000000 0.833333
1 0.00 0.333333 0.5 0.714286 0.000000
2 0.25 0.000000 0.0 0.000000 1.000000
但如果真的需要循环慢的解决方案,请将值附加到列表中,最后:
计时:
np.random.seed(100)
my_data1 = pd.DataFrame(np.random.randint(10, size=(3,5)))
print (my_data1)
0 1 2 3 4
0 8 8 3 7 7
1 0 4 2 5 2
2 2 2 1 0 8
In [334]: %timeit min_max(my_data1)
18.8 ms ± 257 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [335]: %timeit my_data1.sub(my_data1.min(axis=0)).div(my_data1.max(axis=0).sub(my_data1.min(axis=0)))
2.2 ms ± 39.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
谢谢这段代码使我的实际代码非常容易。
In [334]: %timeit min_max(my_data1)
18.8 ms ± 257 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
In [335]: %timeit my_data1.sub(my_data1.min(axis=0)).div(my_data1.max(axis=0).sub(my_data1.min(axis=0)))
2.2 ms ± 39.7 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
np.random.seed(100)
my_data1 = pd.DataFrame(np.random.randint(10, size=(1000,38)))
print (my_data1.head())
def min_max(my_data1):
L = []
for count in range (len(my_data1.columns)):
min_col= my_data1[count].min()
max_col= my_data1[count].max()
value= (my_data1[count]-min_col) / (max_col-min_col)
L.append(value)
return pd.concat(L, axis=1)
df1 = min_max(my_data1)
print (df1.head())
df2 = my_data1.sub(my_data1.min(axis=0)).div(my_data1.max(axis=0).sub(my_data1.min(axis=0)))
print (df2.head())