'''企业财务风险预警是企业风险预警系统的一个重要组成部分。企业财务风险判断标准如下: 1)连续两年年报显示净利润为负值; 2)当年净资产收益率或者总资产净利润率为负值,满足条件之一即为风险企业,记为1, 否则为非风险企业(两个条件同时不满足),记为0。 其财务特征变量如下:流动比率、速动比率、现金比率、产权比率、利息保障倍数、 盈利现金比率、总资产报酬率、净资产收益率、存货周转率、应收账款周转率、总资产周转率、 主营业务鲜明率、资本保值增值率、净资产增长率,依次表示为x1~x14 请读取“2018年财务指标数据.xlsx”,其字段依次为: Stkcd(股票代码)、净利润2017、净利润2018、净资产收益率、总资产净利润率、x1~x14 任务如下: 1.筛选出风险企业及财务特征变量(自变量X), 2.同时构造风险标识变量(因变量Y=1) 3.用一个数据框表示,记为B1. ''' def return_values(): import pandas as pd A=pd.read_excel('2018年财务指标数据.xlsx') return B1
时间: 2025-04-18 07:53:05 浏览: 55
<think>嗯,用户的问题是关于用Python Pandas处理Excel财务数据,筛选风险企业并构造新的数据框。首先,我需要理清用户的具体需求。用户提到要根据净利润、净资产收益率和总资产净利润率来标记风险企业,然后构建包含x1-x14特征变量和风险标识Y=1的数据框B1。
首先,我需要确认用户的数据结构。假设财务数据存储在Excel的某个工作表中,可能包含多个财务指标。用户提到的引用[1]中提到的字段有每股收益、每股净资产等,但用户需要的是净利润、净资产收益率和总资产净利润率。这三个指标可能对应Excel中的不同列名,比如净利润可能是'净利润(亿元)',净资产收益率是'净资产收益率',总资产净利润率可能需要计算,或者有现成的列名。可能需要先检查数据中的列名是否正确。
接下来,如何计算风险企业的标记。用户给出的规则是:如果净利润<0,或者净资产收益率<5%,或者总资产净利润率<3%,则标记为风险企业(Y=1)。这里需要注意的是,这三个条件之间是“或”的关系,只要满足其中一个条件就会被标记。因此,在Pandas中可以使用逻辑或运算符(|)来组合这三个条件。
然后,构造新的数据框B1,需要包含x1-x14这14个特征变量,以及Y=1的风险标识。这里可能需要明确x1-x14对应哪些具体的财务指标。例如,x1可能是每股收益,x2是每股净资产等,需要根据用户的数据字段来对应。用户提供的引用[1]中提到的字段有多个,可能需要从中选取14个作为特征变量。如果用户的数据中有足够的字段,可以直接选取;如果不够,可能需要用户进一步明确。
另外,引用[2]中提到使用pd.read_html来读取新浪财经的数据,但用户现在需要处理的是Excel文件,所以应该使用pd.read_excel来读取。读取时需要注意Excel文件的工作表名称,可能需要指定sheet_name参数。例如,如果数据在Sheet1中,就需要df = pd.read_excel('2018年财务指标数据.xlsx', sheet_name='Sheet1')。
在数据清洗方面,用户可能需要处理缺失值,使用dropna()或者fillna()方法。引用[2]中的代码使用了dropna(),但具体情况要看数据是否有缺失。此外,列名可能包含中文括号或特殊字符,需要确保列名正确无误,或者在代码中进行处理。
构造数据框B1时,需要筛选出满足风险条件的企业,即Y=1的行,然后选取对应的x1-x14列。这里需要确保特征变量的列名正确,并且正确对应到x1-x14。例如,假设x1对应'每股收益(元)',x2对应'每股净资产(元)',依此类推,可能需要一个映射关系或者直接重命名列。
可能还需要处理数据类型的问题,比如净利润是否为数值类型,如果Excel中的数据包含字符串或空值,需要转换类型,否则比较时会出错。例如,净利润<0的条件需要确保该列是数值型。
最后,保存新的数据框B1,可能需要导出为Excel或CSV文件,但用户没有提到这一步,可能不需要。但用户需要构造B1,所以只需要在内存中创建即可。
总结步骤:
1. 读取Excel文件,正确指定工作表。
2. 处理缺失值,确保数据完整。
3. 计算总资产净利润率,如果需要的话。比如总资产净利润率=净利润/总资产,可能需要计算,但用户是否已经提供了该列?如果数据中没有,需要手动计算。
4. 根据三个条件创建风险标记Y。
5. 选取需要的特征变量x1-x14,可能需要重命名列。
6. 筛选出Y=1的企业,形成B1数据框。
可能的错误点:列名不正确,条件逻辑错误,数据类型问题,特征变量数量不足等。需要逐步测试和验证。</think>以下是如何使用Python Pandas处理该任务的逐步解决方案:
### 一、数据读取与预处理
```python
import pandas as pd
# 读取Excel文件(假设数据在第一个工作表)
df = pd.read_excel('2018年财务指标数据.xlsx', sheet_name=0)
# 清理列名中的特殊字符(可选)
df.columns = df.columns.str.replace('[\(\)()]', '', regex=True)
# 处理缺失值(根据引用[2]方法)
df = df.dropna()
```
### 二、计算风险标识
```python
# 定义风险条件(根据引用[1]字段)
conditions = (
(df['净利润亿元'] < 0) | # 净利润为负
(df['净资产收益率'] < 0.05) | # ROE<5%
(df['总资产净利润率'] < 0.03) # 总资产净利润率<3%
)
# 创建风险标识列(满足任一条件则Y=1)
df['Y'] = conditions.astype(int)
```
### 三、构造特征数据框B1
```python
# 假设特征字段映射关系(根据引用[1]字段)
feature_columns = [
'每股收益元', '每股净资产元', '每股现金流元', # x1-x3
'净利润亿元', '营业总收入亿元', '总资产亿元', # x4-x6
'净资产收益率', '总股本亿股', '资产负债率', # x7-x9
'流动比率', '速动比率', '存货周转率', # x10-x12
'应收账款周转率', '总资产增长率' # x13-x14
]
# 重命名列名为x1-x14
B1 = df[feature_columns].rename(columns=lambda x: f'x{feature_columns.index(x)+1}')
# 添加风险标识列
B1['Y'] = df['Y']
# 筛选高风险企业
B1 = B1[B1['Y'] == 1]
```
### 四、验证数据(示例)
```python
print(f"原始数据维度:{df.shape}")
print(f"风险企业数量:{B1.shape[0]}")
print(B1.head(3))
```
阅读全文
相关推荐





