Python dataframe处理中的一些坑

1.dataframe增删

#创建空的新dataframe train_FD001是个人数据,是已创建好的dataframe
columns_last=train_FD001.columns

loc_data2=pd.DataFrame(columns=columns_last)

#本人切片的条件可以忽略  RUL_FD001是datafrme类型,也涉及到dataframe转list

list_rul=list(numpy.array(RUL_FD001.values).flat) 

i=unit_first

while i<=unit_last:
    loc_data2=loc_data2.append(train_FD001.loc[(train_FD001.unit_number==i)&(train_FD001.time_in_cycles==list_rul[i-1])], ignore_index=True)
    #坑1 必须df=df.append 虽然前面删除遇到过这个坑但是这次添加又忘记了 
    #另:注意切片的列和被添加的列相同

2.append会将增加的列中int64类型模糊成object类型

max_loc=loc_data2.describe().max()

min_loc=loc_data2.describe().min()

columns_last=columns_last.drop(['unit_number','time_in_cycles'])

f={}

for colu in columns_last:

    differ=max_loc[colu]-min_loc[colu]
    #本人代码这一行报错,因为loc_data2中有一列被模糊成了obeject类型,因此describe方法忽略了该列
    #而列标签中却还有这一列,所以会出现键错误
    sum_j=max_loc[colu]+min_loc[colu]

    f_i=(differ/(sum_j/2))/c[colu]

    f[colu]=f_i

解决方案

loc_data2=loc_data2.infer_objects()
#infer_objects()方法会将object类型再推断为int64类型 
#还是 df=df.方法 这个坑要注意在dataframe的各种处理中 

max_loc=loc_data2.describe().max()

min_loc=loc_data2.describe().min()

columns_last=columns_last.drop(['unit_number','time_in_cycles'])

f={}

for colu in columns_last:

    differ=max_loc[colu]-min_loc[colu]

    sum_j=max_loc[colu]+min_loc[colu]

    f_i=(differ/(sum_j/2))/c[colu]

    f[colu]=f_i

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Python,使用pandas库DataFrame可以很方便地处理日期。可以使用to_datetime函数将字符串转换为日期格式,也可以使用strftime函数将日期格式转换为字符串格式。此外,还可以使用resample函数对时间序列数据进行重采样,使用shift函数对时间序列数据进行平移,使用rolling函数对时间序列数据进行滑动窗口计算等等。总之,pandas库提供了丰富的日期处理功能,可以满足各种需求。 ### 回答2: 在Python,pandas是一种非常有用的数据分析库,它提供了许多灵活且高效的工具,可以帮助我们对数据进行操作和分析。其,日期处理在数据分析是非常常见的一种需求,而pandasDataFrame提供了丰富的方法来处理日期数据。 首先,我们需要将日期数据转换成pandas的日期格式。可以使用to_datetime()方法来完成这个转换,该方法会将输入转换成pandas.datetime64类型的数据。例如: ``` import pandas as pd df = pd.DataFrame({'date':['2022-01-01','2022-01-02','2022-01-03'],'value':[1,2,3]}) df['date'] = pd.to_datetime(df['date']) print(df.dtypes) ``` 这个例子,我们创建了一个DataFrame,其包含了日期和相应的数值数据,然后使用to_datetime()方法将日期转换成pandas的datetime64类型,最后输出DataFrame的数据类型。输出结果如下: ``` date datetime64[ns] value int64 dtype: object ``` 可以看到,date列的数据类型已经变成了datetime64[ns],说明转换成功。 几乎所有的日期处理方法都需要将日期列设置成DataFrame的索引。可以使用set_index()方法来实现: ``` df = df.set_index('date') print(df) ``` 输出结果如下: ``` value date 2022-01-01 1 2022-01-02 2 2022-01-03 3 ``` 接下来,我们可以使用很多针对日期数据的方法,例如获取年、月、日、小时等单独的时间组成部分,计算时间差等操作。以下是几个示例: ``` # 获取年份 df['year'] = df.index.year # 获取月份 df['month'] = df.index.month # 获取天数 df['day'] = df.index.day # 计算时间差 df['diff'] = df.index - pd.to_datetime('2022-01-01') ``` 以上操作可以将日期数据进行分解或计算,可以方便地完成很多常见的需求。此外,pandas还提供了很多其他的日期处理方法,例如时间重采样(resample)、时间平移(shift)、日期转换(tz_localize, tz_convert)等等,这些方法可以满足不同场景下的需求。 总的来说,pandasDataFrame提供了丰富的日期处理方法,可以方便地完成各种操作,这些方法可以帮助我们更加高效地处理日期数据。 ### 回答3: 在Python,日期时间是一个常见的数据类型,可以用来记录各种事务发生的时间。在Pandas库,我们通常使用DataFrame处理日期。Pandas为我们提供了大量的日期时间函数和类,方便我们对日期进行各种处理。下面我们来看如何用Pandas处理DataFrame的日期。 1. 创建DataFrame 首先,我们需要创建一个DataFrame,其至少有一个日期列。创建DataFrame的方法很多,我们可以使用Python的字典创建。假设我们有如下数据: ```python {'date': ['2021-01-01', '2021-02-01', '2021-03-01', '2021-04-01', '2021-05-01'], 'value': [10, 20, 30, 40, 50]} ``` 我们可以将其转化为DataFrame: ```python import pandas as pd data = {'date': ['2021-01-01', '2021-02-01', '2021-03-01', '2021-04-01', '2021-05-01'], 'value': [10, 20, 30, 40, 50]} df = pd.DataFrame(data) ``` 2. 转化为日期类型 我们可以发现,上面的DataFrame的日期列看起来像日期,但实际上是字符串。我们需要将它们转化为日期类型。首先,我们需要告诉Pandas我们的日期是什么格式的。在这里,我们使用ISO格式,即“年-月-日”: ```python df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d') ``` 这将把字符串列转化为Pandas的日期类型。现在,我们可以对日期进行各种操作了。 3. 日期的运算 一旦我们将日期列转换为日期类型,我们就可以通过DataFrame进行各种日期运算。例如,我们可以计算两个日期之间的时间差: ```python df['diff'] = df['date'].diff() ``` 这将计算日期列每个相邻日期之间的差异。 4. 切片和过滤 我们可以使用日期作为索引,对DataFrame进行切片和过滤。例如,我们可以提取特定年份的数据: ```python df[df['date'].dt.year == 2021] ``` 这将返回与2021年相对应的所有行。 5. 日期的分组和聚合 我们可以使用日期将DataFrame分组,并对每个分组执行聚合操作。例如,我们可以计算每个月份的平均值: ```python df.groupby(df['date'].dt.month).mean() ``` 这将计算每个月的平均值,即1月、2月、3月等。 这些只是Pandas DateFrame处理日期的简单应用,Pandas还有很多高级功能,可以处理更复杂的日期问题。总之,Pandas是一个功能强大的工具,可以轻松处理数据和日期。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值