df.loc[~df['字段2'].str.contains('年'), '字段2'] = '2023年'中~的作用
时间: 2023-09-06 10:14:40 浏览: 199
这行代码是 Pandas 中的 DataFrame 操作,它的作用是将 DataFrame 中“字段2”列中不包含“年”的行的“字段2”值设置为“2023年”。其中“~”表示取反操作,即选择不包含“年”的行。另外,“str.contains()”是一个字符串匹配函数,用于判断字符串是否包含某个子串,返回一个布尔值。因此,这行代码的意思是选择“字段2”列中不包含“年”的行,并将它们的“字段2”值设置为“2023年”。
相关问题
pandas 用str.contains 一个字段如果包含某两个字就生成新的一列判断其类别
可以使用 Pandas 的 loc 方法结合 str.contains 方法来实现。具体的步骤如下:
1. 使用 loc 方法筛选出包含某两个字的行。
2. 将上一步得到的行的索引作为 loc 方法的输入,生成新的一列作为类别。
具体的代码如下所示:
``` python
import pandas as pd
# 生成示例数据
data = {
'text': ['hello world', 'world hello', 'hello', 'world', 'hi world']
}
df = pd.DataFrame(data)
# 使用 loc 方法结合 str.contains 方法生成新的一列作为类别
df.loc[df['text'].str.contains('hello') & df['text'].str.contains('world'), 'category'] = 'category1'
df.loc[~(df['text'].str.contains('hello') & df['text'].str.contains('world')), 'category'] = 'category2'
print(df)
```
运行结果如下所示:
```
text category
0 hello world category1
1 world hello category1
2 hello category2
3 world category2
4 hi world category2
```
在上面的代码中,我们使用 loc 方法结合 str.contains 方法对 text 列进行处理,生成 category 列作为类别。具体来说,如果某个 text 包含 hello 和 world 这两个字,就将其归为 category1 类别,否则归为 category2 类别。最终的结果存储在 df['category'] 列中。需要注意的是,在 loc 方法中,我们使用 ~ 符号表示取反,即取不包含 hello 和 world 这两个字的行。
# 数据集为2015-2020年在线教育市场的投资事件信息汇总 # 数据字段说明: # ▪ 时间:投资事件发生的时间,格式为:年/月/日。 # ▪ 公司名称:被投资的公司名称。 # ▪ 公司网址:被投资公司在信息披露网站的主页URL。 # ▪ 融资轮次:融资轮次。 # ▪ 投资金额:融资金额,单位有人民币、美元等不同货币。该字段的值有多种类型,包括:明确金额、金额范围、未披露。(读入数据后应换算成统一单位,金额范围按中值记录,未披露按0记录) # ▪ 投资人:投资人,有单个投资人、多个投资人、未披露。 # ▪ 最新估值(估算):投资后,被投资公司的估值。估值=投资人投资金额/投资人所占股权比例。 # ▪ 字段1:被投资公司所在的领域(一级)。 # ▪ 字段2:被投资公司所在的领域(二级)。 # ▪ 字段3:被投资公司所在的领域(三级)。 # 请统计:筛选出所有投资方未透露,且投资金额也未透露的投资事件信息,然后按照一级领域统计这些投资在每个领域的总投资次数和金额,按照次数降序输出,次数相同按照金额降序。最后将结果写入result.txt文件中。
好的,这是一个数据处理任务。你需要使用Python编写代码来完成该任务。以下是一个可能的解决方案:
```python
import pandas as pd
# 读入数据
df = pd.read_excel('data.xlsx')
# 将金额转换为统一单位(以万元为单位)
df.loc[df['投资金额'].str.contains('万'), '投资金额'] = df.loc[df['投资金额'].str.contains('万'), '投资金额'].str.extract('(\d+\.?\d*)')['投资金额'].astype(float)
df.loc[df['投资金额'].str.contains('亿'), '投资金额'] = df.loc[df['投资金额'].str.contains('亿'), '投资金额'].str.extract('(\d+\.?\d*)')['投资金额'].astype(float) * 10000
df.loc[df['投资金额'] == '未透露', '投资金额'] = 0
# 筛选出投资金额和投资方均未透露的投资事件
df = df[(df['投资金额'] == 0) & (df['投资人'] == '未透露')]
# 按一级领域统计投资次数和金额
result = df.groupby('字段1').agg({'公司名称': 'count', '投资金额': 'sum'}).sort_values(by=['公司名称', '投资金额'], ascending=False)
# 写入文件
result.to_csv('result.txt', sep='\t')
```
说明:
1. 首先读入数据,并将金额转换为统一单位(以万元为单位)。如果投资金额中包含“万”或“亿”等单位,则提取其中的数字,并乘以相应的倍数转换为万元。
2. 然后筛选出投资金额和投资方均未透露的投资事件,使用逻辑运算符“&”将两个条件连接起来。
3. 最后按照一级领域统计投资次数和金额,并按照题目要求进行排序。注意,如果出现次数相同的情况,需要按照金额降序排列。
4. 将结果写入文件,使用制表符作为字段分隔符。
阅读全文