【问题标题】:Pandas dataframe puts NaN and NaTPandas 数据框放置 NaN 和 NaT
【发布时间】:2019-03-20 11:23:52
【问题描述】:

我正在做的是我用 pandas 生成了一个 DataFrame:

df_output = pd.DataFrame(columns={"id","Payout date", "Amount"}

“支付日期”列是日期时间,“金额”列是浮点数。我从 csv 中获取每一行的值:

df=pd.read_csv("file.csv", encoding = "ISO-8859-1", low_memory=False)

但是当我分配值时:

df_output.loc[df_output['id'] == index, 'Payout date'].iloc[0]=(parsed_date)
pay=payments.get()
ref=refunds.get()
df_output.loc[df_output['id'] == index, 'Amount'].iloc[0]=(pay+ref-for_next_day)

我打印它的列'支付日期'和'金额'它只正确打印id,支付的NaT和金额的NaN,即使将它们转换为浮点数或使用

df_output['Amount']=pd.to_numeric(df_output['Amount'])
df_output['Payout date'] = pd.to_datetime(df_output['Payout date'])

我还尝试在将值传递给 DataFrame 之前进行转换,但没有运气,所以我得到的是:

id Payout date  Amount
1         NaT     NaN
2         NaT     NaN
3         NaT     NaN
4         NaT     NaN
5         NaT     NaN

相反,我正在寻找这样的东西:

id       Payout date  Amount
1         2019-03-11     3.2
2         2019-03-11     3.2
3         2019-03-11     3.2
4         2019-03-11     3.2
5         2019-03-11     3.2

编辑

print(df_output.head(5))
print(df.head(5))

id Payout date  Amount
1         NaT     NaN
2         NaT     NaN
3         NaT     NaN
4         NaT     NaN
5         NaT     NaN

id       Created (UTC)    Type Currency  Amount    Fee     Net
1 2016-07-27 13:28:00  charge      mxn   672.0  31.54  640.46
2 2016-07-27 15:21:00  charge      mxn   146.0   9.58  136.42
3 2016-07-27 16:18:00  charge      mxn   200.0  11.83  188.17
4 2016-07-27 17:18:00  charge      mxn   146.0   9.58  136.42
5 2016-07-27 18:11:00  charge      mxn   286.0  15.43  270.57

【问题讨论】:

  • 执行每个步骤时是否检查列是否已填满?排除故障时,最好打印分配了新变量的每个步骤。例如,从print(df) 开始,然后是print(df_output),然后是print(pay) 等等。我可以想象你会在最终df 之前看到一个问题。
  • 我已经做到了,打印付款将正确返回日期时间,单独打印时金额也正确
  • 你能把你的 df 的负责人也包括进来吗?
  • 头是什么?什么df的头?
  • print(df.head(5)) 打印数据帧的前 5 行。

标签: python pandas dataframe


【解决方案1】:

可能最简单的做法就是重命名您正在加载的数据框的列:

df = pd.read_csv("file.csv", encoding = "ISO-8859-1", low_memory=False, index_col='id')
df.columns(rename={"Created (UTC)":'Payout Date'}, inplace=True)

df_output = df[['Payout Date', 'Amount']]

编辑: 如果您尝试将一个数据框中的列分配给另一个数据框中的列,请执行以下操作:

output_df['Amount'] = df['Amount']

【讨论】:

  • 哪一个df_output?还是df?读取 csv 的人,我无法更改列名
  • 我上面展示的例子是df。除了正确重命名列之外,您似乎没有尝试做任何其他事情?
  • 您应该澄清您的问题,因为我所看到的您所做的只是将加载的数据框输入一个空的数据框,唯一的区别是“创建(UTC)”列被更改为“付款日期'。
  • 这就是我想要做的,但是当打印“空”/第二个时,它只会打印 NaN 或 NAT
  • 您的问题是您尝试填充的数据框没有索引
猜你喜欢
  • 2021-04-30
  • 2019-04-06
  • 2018-05-19
  • 2018-08-13
  • 1970-01-01
  • 2022-12-09
  • 1970-01-01
  • 2020-10-06
  • 2015-12-08
相关资源
最近更新 更多