data['new_col'] = new_col如何循坏这段代码
时间: 2023-04-03 12:03:49 浏览: 49
你可以使用 for 循环来遍历数据集中的每一行,然后将 new_col 的值赋给每一行的 new_col 列。具体代码如下:
for index, row in data.iterrows():
data.at[index, 'new_col'] = new_col
其中,data.iterrows() 可以遍历数据集中的每一行,index 表示当前行的索引,row 表示当前行的数据。data.at[index, 'new_col'] 表示将 new_col 的值赋给当前行的 new_col 列。
相关问题
解释一下代码new_data = pd.DataFrame(new_col).T new_data.columns=new_col_name new_data_all = new_data.dropna(axis=1)
这段代码是对数据进行处理的过程。首先,使用pd.DataFrame()函数将一个名为new_col的列表转换为DataFrame对象,并通过.T方法进行转置,将列变为行。然后,通过给新的DataFrame对象设置列名new_col_name,将新的列名赋值给new_data的columns属性。接下来,使用dropna()方法对new_data进行处理,将所有带有缺失值的列删除,并将处理后的结果赋值给new_data_all变量。该操作通过指定axis=1参数来删除列中含有缺失值的部分。最终,new_data_all将是一个没有缺失值的数据集。
from datetime import datetime, timedelta import pandas as pd test = pd.read_excel("C:\\Users\\1data\\Desktop\\DBM成本收入核算\\test.xlsx") # 定义开始日期和结束日期的列名 start_date_col = test['合同开始日期'] end_date_col = test['合同截止日期'] # 定义新列名 new_col = '日期' # 遍历每一行数据 for index, row in test.iterrows(): start_date = row[start_date_col] end_date = row[end_date_col] date_list = [] # 判断开始日期在每月15号之前还是之后 if start_date.day <= 15: # 开始日期在每月15号之前,直接逐月累加 while start_date <= end_date: date_list.append(start_date) start_date = start_date + timedelta(days=30) else: # 开始日期在每月15号之后,推迟一个月再逐月累加 start_date = start_date + timedelta(days=30) while start_date <= end_date + timedelta(days=30): date_list.append(start_date) start_date = start_date + timedelta(days=30) # 在原表后追加新列 test.loc[index, new_col] = ','.join([str(date.date()) for date in date_list]) # 输出结果 print(test)以上这段代码报错AttributeError: 'Series' object has no attribute 'day',如何修改
这个错误通常是因为 `start_date_col` 和 `end_date_col` 被赋值为 Series 对象而不是列名。在 Pandas 中,当你使用 DataFrame 的列名来访问某一列时,返回的是一个 Series 对象。因此,在这种情况下,你应该直接将列名传递给 `start_date_col` 和 `end_date_col` 变量,而不是使用 Series 对象。
另外,你需要将 `start_date` 和 `end_date` 转换为 datetime 对象,以便你可以在它们上面调用 `day` 属性。你可以使用 Pandas 的 `to_datetime()` 函数将字符串列转换为 datetime 对象。例如:
``` python
from datetime import datetime, timedelta
import pandas as pd
test = pd.read_excel("C:\\Users\\1data\\Desktop\\DBM成本收入核算\\test.xlsx")
# 定义开始日期和结束日期的列名
start_date_col = '合同开始日期'
end_date_col = '合同截止日期'
# 定义新列名
new_col = '日期'
# 遍历每一行数据
for index, row in test.iterrows():
start_date = pd.to_datetime(row[start_date_col]) # 将字符串转换为 datetime 对象
end_date = pd.to_datetime(row[end_date_col]) # 将字符串转换为 datetime 对象
date_list = []
# 判断开始日期在每月15号之前还是之后
if start_date.day <= 15:
# 开始日期在每月15号之前,直接逐月累加
while start_date <= end_date:
date_list.append(start_date)
start_date = start_date + timedelta(days=30)
else:
# 开始日期在每月15号之后,推迟一个月再逐月累加
start_date = start_date + timedelta(days=30)
while start_date <= end_date + timedelta(days=30):
date_list.append(start_date)
start_date = start_date + timedelta(days=30)
# 在原表后追加新列
test.loc[index, new_col] = ','.join([str(date.date()) for date in date_list])
# 输出结果
print(test)
```
这应该可以解决你遇到的问题。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.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)