import pandas as pd
import numpy as np
import urllib
url = 'http://cawcr.gov.au/staff/mwheeler/maproom/RMM/RMM1RMM2.74toRealtime.txt'
urllib.urlretrieve(url,'datafile.txt')
df = pd.read_table('datafile.txt', sep='\s+', header=None)
df.columns = ['year', 'month', 'day', 'n1', 'n2', 'n3', 'n4', 'type']
df = df[df.year > 1978] #new starting row is created, how do I find what the new starting row is
df = df[df.type < 'Prelim_value'] #new ending row is created, how do I find what the new ending row is
tda1 = []
for a in range(starting_row, ending_row):
if a < starting_row+19:
tda1.append(0.0)
else:
ch = df.ix[a:a+20, ['n1']]
dc = np.round(ec,0)
tda1.append(ec)
如何在截断文件开头后找到起始行,查找结束行也是如此?
如果我想把所有东西放在一起,我是否需要创建一个全新的数据框……也就是说,我想让 tda1 与 n1 保持一致。如果我访问 tda1[1700] 和 n1[1700],我希望它们都指向相同的日期。
到目前为止,除了提示 DataFrame 对象不是iloc 的属性。
请您参考如下方法:
要快速回答您的最后一个问题,请使用:
import numpy as np
np.round(ec, 0)
对于您的第一个(系列)问题,您没有提供任何数据供我们使用,而且您的问题不是很清楚。无论哪种方式,您始终可以使用 df.iloc[0] 获取任何数据帧的第一行和最后一行。和 df.iloc[-1] , 分别。
编辑:
如果您只需要知道您有多少行,请使用 df.shape .这是一个玩具示例:
import pandas
df = pandas.DataFrame([
(1977, 1, 1),
(1978, 1, 2),
(1979, 1, 3),
(1980, 1, 4),
(1977, 2, 1),
(1978, 2, 2),
(1979, 2, 3),
(1980, 2, 4),
(1977, 3, 1),
(1978, 3, 2),
(1979, 3, 3),
(1980, 3, 4),
], columns=['year', 'a', 'b'])
print(df.to_string())
打印:
year a b
0 1977 1 1
1 1978 1 2
2 1979 1 3
3 1980 1 4
4 1977 2 1
5 1978 2 2
6 1979 2 3
7 1980 2 4
8 1977 3 1
9 1978 3 2
10 1979 3 3
11 1980 3 4
然后:
df = df[df.year > 1978]
df = df[df.a < 3]
print(df.to_string())
给出:
year a b
2 1979 1 3
3 1980 1 4
6 1979 2 3
7 1980 2 4
在执行上述所有操作后,我们自己尝试一下:
print(df.shape)
for row in range(df.shape[0]-1):
print(df.iloc[row])
四舍五入:
df = pandas.DataFrame(np.random.normal(size=(4,4)))
rounded = np.round(df,1)
print(rounded.to_string())
0 1 2 3
0 -1.2 1.9 0.7 -0.8
1 -0.5 0.9 1.6 -0.3
2 0.4 -0.2 -1.6 -0.2
3 -1.7 1.1 0.1 -0.6
