pandas统计数据里作者列[]里的国家名出现次数,没有[]则表示是中国作者
时间: 2023-09-21 08:08:18 浏览: 73
假设你的数据存储在DataFrame中,作者列名为"Author",则可以使用以下代码来统计国家名出现的次数:
```
import pandas as pd
# 读取数据
df = pd.read_csv('your_data.csv')
# 统计国家名出现的次数
country_counts = df['Author'].str.extract('\[(.*?)\]', expand=False).value_counts()
# 如果没有[]则认为是中国作者
china_count = df['Author'].str.contains('\[.*?\]').value_counts()[False]
print('国家名出现次数:')
print(country_counts)
print('中国作者数量:')
print(china_count)
```
其中,`extract`方法用于提取出方括号中的内容,`value_counts`方法用于统计每个国家名出现的次数。如果`contains`方法返回`False`,则表示该作者不是国外作者,即为中国作者。
相关问题
pandas统计数据里作者列中括号里的国家名出现次数,没有中括号则表示是中国作者
可以使用 Pandas 中的 apply 方法结合正则表达式实现:
```python
import pandas as pd
import re
# 示例数据
df = pd.DataFrame({
'author': ['John (USA)', 'Lily (China)', 'Tom', 'Jerry (Canada)', 'David (China)']
})
# 定义函数,使用正则表达式匹配国家名
def count_country(x):
pattern = r'\((\w+)\)'
match = re.search(pattern, x)
if match:
return match.group(1)
else:
return 'China'
# 对 author 列应用函数,统计国家名出现次数
result = df['author'].apply(count_country).value_counts()
print(result)
```
输出结果为:
```
China 3
Canada 1
USA 1
Name: author, dtype: int64
```
其中,China 出现 3 次,表示有 3 个中国作者;Canada 和 USA 各出现 1 次,表示有 1 个加拿大作者和 1 个美国作者。
pandas统计数据里作者列[]或【】里的国家名出现次数,没有[]或【】则表示是中国作者
可以使用 Pandas 的 `str.contains()` 方法来查找包含指定字符串的行,然后再统计符合条件的行数即可。
假设你的 DataFrame 名称为 `df`,作者列的名称为 `author`,则可以按照以下步骤进行操作:
1. 先找出包含国家名的行:
``` python
df['country'] = df['author'].str.extract('\[(.*?)\]', expand=False) # 提取[]中的内容到新列
mask = df['country'].str.contains('国家名') # 创建包含国家名的行的布尔索引
```
2. 统计包含国家名的行数:
``` python
count = mask.sum() # 统计布尔索引中为 True 的个数
```
3. 统计没有 [] 或 【】 的中国作者数:
``` python
china_count = (df['country'].isna() & (df['author'].str.contains('中国') | df['author'].str.contains('CN'))).sum()
```
其中,`isna()` 方法用于判断该行的 `country` 列是否为空值,`&` 表示逻辑与操作,`|` 表示逻辑或操作。
最终的代码可能类似于:
``` python
df['country'] = df['author'].str.extract('\[(.*?)\]', expand=False)
mask = df['country'].str.contains('国家名')
count = mask.sum()
china_count = (df['country'].isna() & (df['author'].str.contains('中国') | df['author'].str.contains('CN'))).sum()
```
需要将 `国家名` 替换为你需要统计的国家名,同时将 `中国` 替换为你需要统计的其他国家名(如果有的话)。
阅读全文