Skip to main content
 首页 » 编程设计

Python pandas 查找开始/结束行和舍入数

2025年05月04日9sky-heaven

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