alldata3['datetime'] = pd.to_datetime(alldata3['datetime']) alldata3['datetime'] = alldata3['datetime'].dt.strftime('%Y-%m-%d %H:%M:%S') alldata3['datetime'] = alldata3['datetime'].apply(lambda x:datetime.strptime(x,'%Y-%m-%d %H:%M:%S')),出现错误SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead
时间: 2023-08-16 14:03:23 浏览: 64
这个警告通常出现在你尝试对 DataFrame 的一个切片进行修改时。为了避免此警告,你可以使用 .loc 或 .iloc 来修改 DataFrame 中的值,而不是直接对切片进行修改。
你可以这样修改代码:
```
alldata3.loc[:, 'datetime'] = pd.to_datetime(alldata3['datetime'])
alldata3.loc[:, 'datetime'] = alldata3['datetime'].dt.strftime('%Y-%m-%d %H:%M:%S')
alldata3.loc[:, 'datetime'] = alldata3['datetime'].apply(lambda x:datetime.strptime(x,'%Y-%m-%d %H:%M:%S'))
```
这样就使用了 .loc 来修改 DataFrame 中的值,避免了 SettingWithCopyWarning 错误。
相关问题
def select_stocks(): today = datetime.date.today() five_days_ago = today - datetime.timedelta(days=5) stocks = ts.get_stock_basics() for index, row in stocks.iterrows(): data = ts.get_hist_data(index, start=five_days_ago.strftime('%Y-%m-%d'), end=today.strftime('%Y-%m-%d')) if len(data) == 5 and all(data['p_change'] > 0): print(index)改正上述代码
在上述代码中,有几个问题需要修正:
1. 缺少必要的库导入。需要导入datetime和tushare库。
2. 由于tushare库接口的变化,需要对 get_stock_basics() 方法进行更新,改为使用 get_stock_basics() 方法的新版本 get_stock_basics()。
3. 由于 get_stock_basics() 方法返回的是一个DataFrame对象,其中index为股票代码,需要将其转换为字符串形式才能作为参数传递给 get_hist_data() 方法。
4. 在循环中,应该首先检查数据是否存在,再进行后续操作。
在以上基础上,修正后的代码如下:
```python
import datetime
import tushare as ts
def select_stocks():
today = datetime.date.today()
five_days_ago = today - datetime.timedelta(days=5)
stocks = ts.get_stock_basics()
for index, row in stocks.iterrows():
data = ts.get_hist_data(str(index), start=five_days_ago.strftime('%Y-%m-%d'), end=today.strftime('%Y-%m-%d'))
if data is not None and len(data) == 5 and all(data['p_change'] > 0):
print(index)
```
修正后的代码中,首先导入了必要的库,然后对 get_stock_basics() 方法进行了更新,将获取股票数据的代码放入了 if 语句中,以确保数据存在后才进行后续操作。
# 创建一个空的DataFrame,用于存储所有小时的求和结果 sum_data = pd.DataFrame() # 读取多个表格并执行相同的操作 for file in ['城二.xlsx', '涪陵.xlsx', '长寿.xlsx']: # 读取Excel文件 df = pd.read_excel(file) # 将时间列转换为datetime类型 df['时间'] = pd.to_datetime(df['时间'], format='%H:%M:%S') # 迭代每个小时 for hour in range(24): # 选择特定小时的数据行 data_hour = df.loc[df['时间'].dt.hour == hour] # 对多个列进行求和,并输出为一行数据 sum_hour = data_hour[['下行平均可用PRB个数', '下行平均使用的PRB个数', '下行调度平均流数', '上行平均可用PRB个数', '上行平均使用的PRB个数', '上行调度平均流数', '平均使用的PDCCH CCE个数', '平均可用的PDCCH CCE个数', '下行PRB*空分流', '上行PRB*空分流']].sum().to_frame().T.reset_index(drop=True) # 将每个小时的求和结果追加到总的结果DataFrame中 sum_data = pd.concat([sum_data, sum_hour], ignore_index=True) # 将结果保存到Excel表格 sum_data.to_excel('结果.xlsx', index=False)我希望每个不同的excel文件的结果能够在同一个表格中,但是含有各自的表头,能够分开
如果您希望每个不同的Excel文件的结果能够在同一个表格中,但含有各自的表头并能够分开,可以按照以下方式修改代码:
```python
import pandas as pd
# 创建一个空的DataFrame,用于存储所有文件的结果
all_data = pd.DataFrame()
# 读取多个表格并执行相同的操作
for file in ['城二.xlsx', '涪陵.xlsx', '长寿.xlsx']:
# 读取Excel文件
df = pd.read_excel(file)
# 将时间列转换为datetime类型
df['时间'] = pd.to_datetime(df['时间'], format='%H:%M:%S')
# 迭代每个小时
for hour in range(24):
# 选择特定小时的数据行
data_hour = df.loc[df['时间'].dt.hour == hour]
# 对多个列进行求和,并输出为一行数据
sum_hour = data_hour[['下行平均可用PRB个数', '下行平均使用的PRB个数', '下行调度平均流数', '上行平均可用PRB个数', '上行平均使用的PRB个数', '上行调度平均流数', '平均使用的PDCCH CCE个数',
'平均可用的PDCCH CCE个数', '下行PRB*空分流', '上行PRB*空分流']].sum().to_frame().T.reset_index(drop=True)
# 添加文件名作为新的列
sum_hour['文件名'] = file
# 将每个小时的求和结果追加到总的结果DataFrame中
all_data = pd.concat([all_data, sum_hour], ignore_index=True)
# 创建一个ExcelWriter对象,用于将结果写入到Excel表格中
writer = pd.ExcelWriter('结果.xlsx', engine='xlsxwriter')
# 将总的结果DataFrame写入到ExcelWriter对象中的总结果工作表中
all_data.to_excel(writer, sheet_name='总结果', index=False)
# 按文件名分组,将每个文件的结果写入到ExcelWriter对象中的不同工作表中
for file, data in all_data.groupby('文件名'):
data.to_excel(writer, sheet_name=file, index=False)
# 保存ExcelWriter对象中的结果到Excel表格中
writer.save()
```
这段代码将在同一个Excel文件中,包含名为'总结果'的总结果工作表,并在其他工作表中分别包含每个文件的结果,工作表名与文件名对应。每个工作表都会有各自的表头,并且所有结果也会被保存在一个总的结果DataFrame中。
请尝试使用修改后的代码,并将Excel文件命名为'结果.xlsx',查看是否符合您的需求。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![7z](https://img-home.csdnimg.cn/images/20210720083312.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)