我正在尝试阅读csv文件,并且我已根据某些条件执行列操作。 它完全忽略了我的if条件并执行else语句。 经过多次故障排除后,我感到非常痛苦,我无法纠正它。
以下是代码:
推文是推文的专栏名称
inf = pd.read_csv('string.csv')
for r in inf :
if "RT @" in inf.Tweet :
inf["Engagements"] = 0
else :
inf["Engagements"] = inf["Favorite_Count"] + inf["Retweet_Count"]
inf.to_csv('string2.csv', index=False)
答案 0 :(得分:2)
在使用数组的pandas中,所以需要numpy.where
使用str.contains
创建的布尔掩码,^
开头string
或使用str.startswith
:
inf["Engagements"] = np.where(inf["Tweet"].str.contains('^RT @'),
0,
inf["Favorite_Count"] + inf["Retweet_Count"])
样品:
inf["Engagements"] = np.where(inf["Tweet"].str.contains('^RT @'),
0,
inf["Favorite_Count"] + inf["Retweet_Count"])
print (inf)
Favorite_Count Retweet_Count Tweet Engagements
0 1 2 RT @ ddd 0
1 4 0 dd 4
2 5 7 dds RT @ 12
inf["Engagements"] = np.where(inf["Tweet"].str.startswith('RT @'),
0,
inf["Favorite_Count"] + inf["Retweet_Count"])
print (inf)
Favorite_Count Retweet_Count Tweet Engagements
0 1 2 RT @ ddd 0
1 4 0 dd 4
2 5 7 dds RT @ 12
答案 1 :(得分:1)
您可以先将Engagement
列初始化为零。然后创建一个掩码,以查找不以开始的推文< RT' (注意~
否定)。最后,使用掩码添加Favorite_Count
和Retweet_Count
列。
请注意,您很少想要使用带数据框的循环。
inf = pd.read_csv('string.csv')
inf['Engagement'] = 0
mask = ~inf.Tweet.str.startswith('RT @')
inf.loc[mask, 'Engagement'] = (
inf.loc[mask, 'Favorite_Count']
+ inf.loc[mask, 'Retweet_Count']
)
示例:
# Sample data.
inf = pd.DataFrame(
{'Tweet': ["RT @ something", "something that doesn't start with RT @", "something else"],
'Favorite_Count': [1, 2, 3],
'Retweet_Count': [3, 2, 1]})
# Apply code
inf['Engagement'] = 0
mask = ~inf.Tweet.str.startswith('RT @')
inf.loc[mask, 'Engagement'] = (
inf.loc[mask, 'Favorite_Count']
+ inf.loc[mask, 'Retweet_Count']
)
>>> inf[['Favorite_Count', 'Retweet_Count', 'Engagement', 'Tweet']]
Favorite_Count Retweet_Count Engagement Tweet
0 1 3 0 RT @ something
1 2 2 4 something that doesn't start with RT @
2 3 1 4 something else
答案 2 :(得分:0)
除了上述简明的答案之外,如果您想使用类似的if else结构,您可以使用set_value
来设置特定行和列的值。
import pandas as pd
inf = pd.read_csv('string.csv')
for index,row in inf.iterrows():
if "RT @" in row["Tweet"]:
inf.set_value(index, "Engagements", 0)
else:
inf.set_value(index, "Engagements", row["Favorite_Count"] + row["Retweet_Count"])
inf.to_csv('string2.csv', index=False)
答案 3 :(得分:-1)
if string.startswith(whateveritshouldstartwith):
这是实现此目的的正确方法。