我得到一个包含列(“营养成分”)的数据框,并被要求遍历单元格中的每个值,提取出营养成分列中的每个值,并将其附加到新列中。例如,将51.5、173.4、269.8、368.1和352.9(“营养事实”列中每行的第一个值)分别添加到名为“ One One”的新列中。问题是要我使用循环来执行此操作。我在创建此循环时遇到了麻烦。任何帮助将不胜感激。
答案 0 :(得分:0)
您可以使用pandas apply方法,而不是迭代shell中的所有值。例如:
import pandas as pd
import numpy as np
def function(val):
return val*val
df = pd.DataFrame([[4, 9]] * 3, columns=['A', 'B'])
df['C']=df['A'].apply(function)
print(df)
这将给出这样的输出。
A B C
0 4 9 16
1 4 9 16
2 4 9 16
首先,您必须定义与您的需求相关的自己的功能。在这里,以我的示例为例,我获取列'A'
中的所有值,并在名为'C'
的另一列后附加平方值'A'
。
在您的情况下,以下代码将起作用,
def function(data):
return data[0]
df['column_One']=df['Nutrition Facts'].apply(function)
答案 1 :(得分:0)
简单的解决方案:
使用pd.Series()
展开,然后合并:
df_temp = df["Nutrition Facts"].apply(pd.Series)
df.merge(df_temp, left_index=True)
使用for循环:
遍历值并添加到字典数组中:
expanded_data = []
for row in df["Nutrition Facts"].values:
row_data = {}
for i, value in enumerate(row):
row_data[i] = value
# Save to all data
expanded_data.append(row_data)
# Now convert to a dataframe and merge
df_temp = pd.DataFrame.from_records(expanded_data)
df.merge(df_temp, left_index=True)