Py学习  »  Python

让python打印出我的csv中两个数字之间的行

Lilly Mayo-099 • 3 年前 • 1409 次点击  

我现在有一个代码,可以根据用户输入从csv打印出数据行,该代码显示如下:

#allows user input to select a column and then select a value from that 

    column data = pd.read_csv('/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/site-packages/pip/Locations.csv')
   rowcol = 0 #the colum that is being searched is column 0 row1 =
    int(input("Enter Number: ")) #enter in your first point on the map Eg
    15 row2 = int(input("Enter Number: ")) #enter in your 2nd point on the
    graph eg 18 result = data.iloc[[row1, row2]]

但现在我希望我的代码也打印出这两个输入值之间的行(例如,如果用户输入12和15,它会打印出12、13、14和15的行)

这就是我目前拥有的,但我不确定如何进一步:

num_list = []
for i in range(row1+1, row2):
    num_list.append(i)
    
print(f'Numbers between 2 points are:\n{btwpoints}')
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/129081
 
1409 次点击  
文章 [ 2 ]  |  最新文章 3 年前
Nikita Almakov
Reply   •   1 楼
Nikita Almakov    3 年前

考虑退房 convtools 图书馆:

# inputs
input_file = "tmp/input.csv"
column = "Price"
left_bound = 100
right_bound = 202

rows = (
    # read csv file, use header as column names
    Table.from_csv(input_file, header=True)
    # cast column values to int
    .update(**{column: c.col(column).as_type(int)}).into_iter_rows(dict)
)
converter = (
    # this one lets the left bound in, it is to be skipped
    c.drop_while(c.item(column) != left_bound)
    .take_while(c.item(column) != right_bound)
    .gen_converter()
)
filtered_rows = iter(converter(rows))

try:
    # skipping the left bound
    next(filtered_rows)
except StopIteration:
    print("no rows")
else:
    for row in filtered_rows:
        print(row)
nikeros
Reply   •   2 楼
nikeros    3 年前

你可以用 range :

df.iloc[range(row1, row2)]

如果你需要包括 row2 也:

df.iloc[range(row1, row2 + 1)]

无论如何,你都应该管理明显的异常(比如 row2 < row1 禁止进入 情况)。

禁止进入 情况可以这样处理:

df.iloc[range(max(0, row1), min(df.shape[0], row2+1))]

row2 <= row1 将返回一个空的 DataFrame 这可能是一个可接受的输出