我读了2个csv文件并从中创建了2个数据帧。
我正在使用第二个数据帧并使用它进行一些计算以附加到第一个数据帧。但是,我似乎没有附加到第一个数据框的内容实际发生。
要使这一点正确,我需要做些什么?
以下是我正在使用的代码:
import pandas as pd
m = pd.read_csv('DailyHistoricData.csv', header = None, index_col=0)
f = pd.read_csv('ImportFMP.csv', header = None)
for index in range(len(f)):
a0 = f.ix[index, 0]
a1 = f.ix[index, 1]
a2 = f.ix[index, 7]
a3 = f.ix[index, 8]-f.ix[index, 9]
a4 = 100*f.ix[index, 2]
a5 = f.ix[index, 10]-f.ix[index, 11]
a6 = f.ix[index, 3]
a7 = f.ix[index, 4]
a8 = f.ix[index, 5]
a9 = f.ix[index, 6]
m.append([a0, a1, a2, a3, a4, a5, a6, a7, a8, a9])
print m.tail(3)
f的信息是:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 720 entries, 0 to 719
Data columns (total 12 columns):
0 720 non-null int64
1 720 non-null int64
2 720 non-null float64
3 720 non-null int64
4 720 non-null int64
5 720 non-null int64
6 720 non-null int64
7 720 non-null int64
8 720 non-null int64
9 720 non-null int64
10 720 non-null float64
11 720 non-null int64
dtypes: float64(2), int64(10)None
前5行数据是:
0 1 2 3 4 5 6 7 8 9 10 11
0 11541 20110118 1.55 1296 1290 1295 1334 11838 1646 1393 525 687
1 11542 20110119 2.46 1295 1279 1282 1337 11825 697 2358 115 958
2 11543 20110120 0.70 1283 1271 1280 1312 11822 1141 1892 547 632
3 11544 20110121 0.83 1291 1282 1283 1310 11871 1597 1438 717 535
4 11545 20110124 1.23 1292 1282 1291 1304 11980 2143 904 628 325
m信息是:
<class 'pandas.core.frame.DataFrame'>
Int64Index: 11544 entries, 1 to 11544
Data columns (total 19 columns):
1 11544 non-null int64
2 11544 non-null float64
3 11544 non-null int64
4 11544 non-null float64
5 11544 non-null float64
6 11544 non-null float64
7 11544 non-null float64
8 11544 non-null float64
9 11544 non-null int64
10 11544 non-null float64
11 11544 non-null float64
12 11544 non-null float64
13 11544 non-null int64
14 11544 non-null float64
15 11544 non-null float64
16 11544 non-null float64
17 11544 non-null int64
18 11544 non-null float64
19 11544 non-null int64
dtypes: float64(13), int64(6)None
m的前5行数据是:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 \
0
1 19650302 507.99 70 56 1.77 0 0 0 0 0 0 0 0 0 0
2 19650303 507.35 46 73 1.07 0 0 0 0 0 0 0 0 0 0
3 19650304 505.94 -104 96 -0.39 0 0 0 0 0 0 0 0 0 0
4 19650305 504.76 -200 66 0.14 0 0 0 0 0 0 0 0 0 0
5 19650308 504.86 160 89 0.90 0 0 0 0 0 0 0 0 0 0
16 17 18 19
0
1 0 0 0 1
2 0 0 0 2
3 0 0 0 3
4 0 0 0 4
5 0 0 0 5
答案 0 :(得分:2)
你应该对此进行矢量化:
In [68]: a3 = f.iloc[:, 8] - f.iloc[:, 9]
In [69]: a4 = 100 * f.iloc[:, 2]
In [70]: a5 = f.iloc[:, 10] - f.iloc[:, 11]
In [71]: toappend = pd.concat([a3, a4, a5], axis=1).rename(columns=dict(zip(range(3), list('abc'))))
In [72]: toappend.tail()
Out[72]:
a b c
715 -1147 100 -247
716 -1022 89 -200
717 1491 109 328
718 712 87 194
719 -335 97 -84
[5 rows x 3 columns]
In [73]: res = m.append(f.iloc[:, [0, 3, 4, 5, 1, 6, 7]].join(toappend))
In [74]: res.tail()[['a', 'b', 'c']]
Out[74]:
a b c
715 -1147 100 -247
716 -1022 89 -200
717 1491 109 328
718 712 87 194
719 -335 97 -84
[5 rows x 3 columns]
一般来说,如果你发现自己编写的循环的主体包含逐元素的算术运算,你很可能能够对整个向量/ Series
对象进行操作并利用numpy
在这方面的速度。