Python:无法通过`for`循环传递从文件中读取的字符串值
Posted
技术标签:
【中文标题】Python:无法通过`for`循环传递从文件中读取的字符串值【英文标题】:Python: unable to pass string values read from file through `for` loop 【发布时间】:2021-12-06 22:17:30 【问题描述】:我正在尝试返回数据框中所有值的中位数,该数据框中的行还包含字符串值列表中的每一个。我可以像这样一次成功地让它手动工作:
line = "History"
df_q = df_genre['roi'].loc[df_genre['genre'] == line].median()
print(line, df_q)
但是当我尝试通过if
循环读取字符串值来自动化该过程时,我得到nan
结果而不是中值。这是我的代码:
with open('genres_unique') as i:
for line in i:
df_line = df_genre['roi'].loc[df_genre['genre'] == line].median()
print(line, df_line)
【问题讨论】:
您能否通过添加第一个代码块的输出、genres_unique
中的内容以及第二个代码块的预期输出来为您的问题添加上下文?
但是对于一些可能看起来错误的前期事情是for line in i:
,它应该是for line in i.readlines():
。 for line in i
将尝试迭代 i
,这是一个文件对象(不可迭代,因此为 NaN)。您需要从文件中取出这些行,然后迭代这些行 (i.readlines()
)
@TimothyWong:不,这就是直接在文件上进行迭代的等价物。可能的问题是这些行(可能是最后一行除外)将以换行符结尾,这与数据帧值不匹配。
【参考方案1】:
@jasonharper 是正确的:我需要从文本文件中删除换行符。这是使用rstrip
的正确代码:
with open('genres/genres_unique') as i:
for line in i:
newline = line.rstrip()
df_line = df_genre['roi'].loc[df_genre['genre'] == newline].median()
print(line, df_line)
【讨论】:
以上是关于Python:无法通过`for`循环传递从文件中读取的字符串值的主要内容,如果未能解决你的问题,请参考以下文章