Pandas DataFrame拼接字符串与元素输出异常问题求解
错误原因
你的代码存在4个核心问题,导致无法得到预期结果:
- 迭代逻辑错误:直接对
dframe做for循环时,Python默认遍历的是DataFrame的列名(也就是会依次拿到'A'、'B'两个值),根本不会逐行读取数据 - 列索引错误:
dframe[0]、dframe[1]的写法是取列名为0、1的列,你的DataFrame列名是'A'和'B',不存在对应列,运行时会直接抛出KeyError - f-string语法错误:f-string中只有需要替换的变量/表达式需要包裹在
{}里,你把固定文本也包进了{},还加了不必要的转义引号,会触发语法解析报错 - 格式问题:就算前面的逻辑都对,你写的拼接逻辑没有在文本和变量之间加空格,输出的内容会出现文字和值粘连的情况
修正代码
写法1:逐行迭代(适合小数据量,逻辑直观)
用iterrows()方法实现逐行遍历,直接通过列名取每行对应的值即可:
import pandas as pd dframe = pd.DataFrame({ 'A': [1, 2, 3], 'B': ['Guitar', 'Piccolo', 'Sax'] }) for _, row in dframe.iterrows(): print(f"Mary's favorite number is {row['A']} and her favorite instrument is {row['B']}")
写法2:向量化拼接(适合大数据量,执行效率更高)
利用Pandas的向量化操作先批量拼接好所有输出字符串,再循环打印,性能比逐行迭代好很多:
import pandas as pd dframe = pd.DataFrame({ 'A': [1, 2, 3], 'B': ['Guitar', 'Piccolo', 'Sax'] }) outputs = "Mary's favorite number is " + dframe['A'].astype(str) + " and her favorite instrument is " + dframe['B'] for line in outputs: print(line)
运行效果
上述两种写法运行后,都会输出你预期的结果:
Mary's favorite number is 1 and her favorite instrument is Guitar Mary's favorite number is 2 and her favorite instrument is Piccolo Mary's favorite number is 3 and her favorite instrument is Sax
内容的提问来源于stack exchange,提问作者HelpMeCode
相关产品推荐
相关产品推荐

