社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

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

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

我现在有一个代码,可以根据用户输入从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
 
1377 次点击  
文章 [ 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 这可能是一个可接受的输出