【发布时间】:2021-04-16 20:37:38
【问题描述】:
我正在读取一个简单的 csv 文件并创建一个 pandas 数据框。 csv 文件可以有 1 行或 2 行或 10 行。
如果 csv 文件有 1 行,那么我想创建几列,如果它有
读取 csv 后,我的示例数据框如下所示。
df=pd.read_csv('/home/abc/myfile.csv',sep=',')
print(df)
id rate amount address lb ub msa
1 2.50 100 abcde 30 90 101
10 20 102
103
104
105
106
107
108
109
110
案例 1)如果数据框只有 1 条记录,那么我想创建新列“new_id”、“new_rate”和“new_address”并分配来自“id”、“rate”和“address”列的值数据框
Expected Output:
id rate amount address lb ub msa new_id new_rate new_address
1 2.50 100 abcde 30 90 101 1 2.50 abcde
案例 2)如果数据帧有
Expected Output:
if there is only 1 row:
id rate amount address lb ub msa lb_1 ub_1
1 2.50 100 abcde 30 90 101 30 90
if there are 2 rows:
id rate amount address lb ub msa lb_1 ub_1 lb_2 ub_2
1 2.50 100 abcde 30 90 101 30 90 10 20
10 20 102
案例 3)如果数据框有 10 条记录,那么我想创建 10 个新列,即 msa_1,msa_2....msa_10 并分配各自的值 msa_1=101, msa_2=102........msa_10 =110 来自数据帧的每一行
Expected Output:
id rate amount address lb ub msa msa_1 msa_2 msa_3 msa_4 msa_5 msa_6 msa_7 msa_8 msa_9 msa_10
1 2.50 100 abcde 30 90 101 101 102 103 104 105 106 107 108 109 110
10 20 102
103
104
105
106
107
108
109
110
我正在尝试编写如下代码,但对于第 2 和第 3 种情况,我不知道该怎么做,如果有更好的方法来处理所有 3 种情况,那就太好了。 感谢是否有人可以向我展示完成它的最佳方法。提前致谢
Case1:
if df.shape[0]==1:
df.loc[(df.shape[0]==1), "new_id"] = df["id"]
df.loc[(df.shape[0]==1),"new_rate"]= df["rate"]
df.loc[(df.shape[0]==1),"new_address"]= df["address"]
Case2:
if df.shape[0]<=2:
for i in 1 to len(df.index)
df.loc[df['lb_i']]=db['lb']
df.loc[df['ub_i']]=df['ub']
Case3:
if df.shape[0]<=10:
for i in 1 to len(df.index)
df.loc[df['msa_i']]=df['msa']
【问题讨论】:
-
由于行数很少,您能否在问题中为每个案例放置一个测试数据集?它将帮助人们快速上手并测试他们的代码。
-
@hegdep:谢谢..添加了所有 3 个案例的预期输出