如何将列表中的值插入 pandas 数据框列?
How can i insert values from a list into a pandas data frame column?
我有这个数据框:
index
x
y
0
0
3
1
0.07
4
2
0.1
6
3
0. 13
5
我想向 x 列插入新的 x 值
new_x = [0, 0.03, 0.07, 0.1, 0.13, 0.17, 0.2]
这样数据框就变成了
index
x
y
0
0
3
1
0.03
NaN
2
0.07
4
3
0.1
6
4
0. 13
5
5
0. 17
NaN
6
0. 2
NaN
所以基本上对于 column x
中不存在的每个 new_x
值,y value
是 NaN
是否可以在 pandas 中完成?谢谢
您可以使用 Numpy 的 searchsorted
。
创建与 new_x
数组长度相同的 new_y
数组后。您使用 searchsorted
来确定 new_y
数组中您需要删除旧 y
值的位置。
new_y = np.full(len(new_x), np.nan, np.float64)
new_y[np.searchsorted(new_x, df.x)] = df.y
pd.DataFrame({'x': new_x, 'y': new_y})
x y
0 0.00 3.0
1 0.03 NaN
2 0.07 4.0
3 0.10 6.0
4 0.13 5.0
5 0.17 NaN
6 0.20 NaN
这是 merge
函数对 pandas 的直接应用。更具体地说 left join
.
import pandas as pd
x1 = [0, 0.07, 0.1, 0.13]
y1 = [3, 4, 6, 5]
df1 = pd.DataFrame({"x": x1, "y": y1})
print(df1)
x2 = [0, 0.03, 0.07, 0.1, 0.13, 0.17, 0.2]
df2 = pd.DataFrame({"x": x2})
print(df2)
df3 = df2.merge(df1, how="left", on="x")
print(df3)
x y
0 0.00 3
1 0.07 4
2 0.10 6
3 0.13 5
x
0 0.00
1 0.03
2 0.07
3 0.10
4 0.13
5 0.17
6 0.20
x y
0 0.00 3.0
1 0.03 NaN
2 0.07 4.0
3 0.10 6.0
4 0.13 5.0
5 0.17 NaN
6 0.20 NaN
您可以尝试使用join方法。这是一些您可以参考的示例代码
d1 = {'x': [0, 0.07, 0.1, 0.13], 'y': [3,4,6,5]}
d2 = {'x': [0, 0.03, 0.07, 0.1, 0.13, 0.17, 0.2]}
df1 = pd.DataFrame(data=d1)
df2 = pd.DataFrame(data=d2)
df2.set_index('x').join(df1.set_index('x'), on='x', how='left').reset_index()
尝试使用它,您可以将列中已有的值与新值进行比较,然后您可以创建一个 df 剩余值并将其连接到旧的 df
import pandas as pd
import numpy as np
df = pd.DataFrame({'x':[0,0.07,0.1,0.13], 'y':[3,4,6,5]})
new_list = [0, 0.03, 0.07, 0.1, 0.13, 0.17, 0.2]
def diff(new_list, col_list):
if len(new_list) > len(df['x'].to_list()):
diff_list = list(set(new_list) - set(df['x'].to_list()))
else:
diff_list = list(set(df['x'].to_list()) - set(new_list))
return diff_list
new_df = pd.DataFrame({'x':diff(new_list,df['x'].to_list()),'y':np.nan})
fin_df = pd.concat([df,new_df]).reset_index(drop=True)
fin_df
x y
0 0.00 3.0
1 0.07 4.0
2 0.10 6.0
3 0.13 5.0
4 0.03 NaN
5 0.20 NaN
6 0.17 NaN
我有这个数据框:
index | x | y |
---|---|---|
0 | 0 | 3 |
1 | 0.07 | 4 |
2 | 0.1 | 6 |
3 | 0. 13 | 5 |
我想向 x 列插入新的 x 值
new_x = [0, 0.03, 0.07, 0.1, 0.13, 0.17, 0.2]
这样数据框就变成了
index | x | y |
---|---|---|
0 | 0 | 3 |
1 | 0.03 | NaN |
2 | 0.07 | 4 |
3 | 0.1 | 6 |
4 | 0. 13 | 5 |
5 | 0. 17 | NaN |
6 | 0. 2 | NaN |
所以基本上对于 column x
中不存在的每个 new_x
值,y value
是 NaN
是否可以在 pandas 中完成?谢谢
您可以使用 Numpy 的 searchsorted
。
创建与 new_x
数组长度相同的 new_y
数组后。您使用 searchsorted
来确定 new_y
数组中您需要删除旧 y
值的位置。
new_y = np.full(len(new_x), np.nan, np.float64)
new_y[np.searchsorted(new_x, df.x)] = df.y
pd.DataFrame({'x': new_x, 'y': new_y})
x y
0 0.00 3.0
1 0.03 NaN
2 0.07 4.0
3 0.10 6.0
4 0.13 5.0
5 0.17 NaN
6 0.20 NaN
这是 merge
函数对 pandas 的直接应用。更具体地说 left join
.
import pandas as pd
x1 = [0, 0.07, 0.1, 0.13]
y1 = [3, 4, 6, 5]
df1 = pd.DataFrame({"x": x1, "y": y1})
print(df1)
x2 = [0, 0.03, 0.07, 0.1, 0.13, 0.17, 0.2]
df2 = pd.DataFrame({"x": x2})
print(df2)
df3 = df2.merge(df1, how="left", on="x")
print(df3)
x y
0 0.00 3
1 0.07 4
2 0.10 6
3 0.13 5
x
0 0.00
1 0.03
2 0.07
3 0.10
4 0.13
5 0.17
6 0.20
x y
0 0.00 3.0
1 0.03 NaN
2 0.07 4.0
3 0.10 6.0
4 0.13 5.0
5 0.17 NaN
6 0.20 NaN
您可以尝试使用join方法。这是一些您可以参考的示例代码
d1 = {'x': [0, 0.07, 0.1, 0.13], 'y': [3,4,6,5]}
d2 = {'x': [0, 0.03, 0.07, 0.1, 0.13, 0.17, 0.2]}
df1 = pd.DataFrame(data=d1)
df2 = pd.DataFrame(data=d2)
df2.set_index('x').join(df1.set_index('x'), on='x', how='left').reset_index()
尝试使用它,您可以将列中已有的值与新值进行比较,然后您可以创建一个 df 剩余值并将其连接到旧的 df
import pandas as pd
import numpy as np
df = pd.DataFrame({'x':[0,0.07,0.1,0.13], 'y':[3,4,6,5]})
new_list = [0, 0.03, 0.07, 0.1, 0.13, 0.17, 0.2]
def diff(new_list, col_list):
if len(new_list) > len(df['x'].to_list()):
diff_list = list(set(new_list) - set(df['x'].to_list()))
else:
diff_list = list(set(df['x'].to_list()) - set(new_list))
return diff_list
new_df = pd.DataFrame({'x':diff(new_list,df['x'].to_list()),'y':np.nan})
fin_df = pd.concat([df,new_df]).reset_index(drop=True)
fin_df
x y
0 0.00 3.0
1 0.07 4.0
2 0.10 6.0
3 0.13 5.0
4 0.03 NaN
5 0.20 NaN
6 0.17 NaN