我正在寻找在数据帧中填充新列内容的帮助。我需要New_column来根据其他列中的内容进行填充。
import pandas as pd
df = pd.read_csv('sample.txt')
# the data is imported as one column
df.columns = ['Test']
# split into columns
dfnew = df.Test.str.split(expand=True).rename(columns={0:'Datetime', 1:'P1', 2:'P2'})
# create a new column
dfnew["New_column"] = ""
print(dfnew)
Datetime P1 P2 New_column
8 'Name-1' None None
9 2017-01-01T00:00:00 2800 1600
10 2017-02-01T00:00:00 -99999 2375
.. ... ... ... ...
72 'Name-2' None None
73 2018-10-11T00:00:00 0 2000
74 2018-10-18T00:00:00 0 2000
.. ... ... ... ...
[724 rows x 4 columns]
在.txt文件中,当Datetime列中有Name-#值时,P1和P2行为空,但在打印df时,空格将替换为"None"。每x行,Datetime列中的Name-#就会发生变化(与名称相关联的数字不会以任何顺序增加(。我希望New_column用Datetime列中的Name-#填充每一行,直到下一个Name-#值替换它:
Datetime P1 P2 New_column
8 'Name-1' None None
9 2017-01-01T00:00:00 2800 1600 Name-1
10 2017-02-01T00:00:00 -99999 2375 Name-1
.. ... ... ... ...
72 'Name-2' None None
73 2020-10-11T00:00:00 0 2000 Name-2
74 2020-10-18T00:00:00 0 2000 Name-2
.. ... ... ... ...
623 'Name-14' None None
624 2020-04-21T00:00:00 -99999 730 Name-14
625 2020-04-27T00:00:00 0 260 Name-14
.. ... ... ... ...
[724 rows x 4 columns]
我还想删除Datetime列中具有Name-#的行(即第8行、第72623.行等(。我需要自动执行此过程,以便导入相同样式但不一定大小相同或Name-#值相同的.txt文件。我曾尝试使用带有多个if语句的for循环创建一个列表,然后将New_column分配给该列表,但我似乎无法使其工作。。
我是Python的初学者,如果有任何帮助,我将不胜感激。
尝试下面的代码。首先,我们使用Datetime列创建一个新列。如果列值中包含"Name",则"new_col"的值将是DateTime列的值,否则它将是np.NaN(相当于NULL(。
如果值是np.nan.,那么我们使用ffinl((函数来正向填充new_col
import numpy as np
dfnew['new_col']=[x if 'Name' in str(x) else np.nan for x in dfnew.Datetime.values ]
dfnew['new_col']=dfnew['new_col'].ffill()
[ffill((][1]
[1] :https://www.geeksforgeeks.org/python-pandas-dataframe-ffill/#:~:text=ffinll((%20函数%20已使用,传播%20最后%20有效%20观察%20转发&text=就地%20%3A%20If%20True%2C%20fill%20in,一个%20column%20in%20a%20DataFrame(。