在这个问题之前,我要说,我不拥有csv中数据开始的方式。我也没有直接访问csv的权限,因为我只能从我没有直接访问权限的SFTP中提取csv。API显示的数据格式与csv显示的数据格式相同。以下是与数据帧相关的传入csv的两列
+-----+-------------------------------+-------------+
| | Sourcing Event ID (DTRM ID) | Site |
+-----+-------------------------------+-------------+
| 0 | 1035 | ,ABC55, |
| 1 | 1067 | ,, |
| 2 | 1181 | ,, |
| 3 | 1183 | ,, |
| 4 | 1184 | ,, |
| 5 | 1264 | ,, |
| 6 | 1307 | ,DEF2, |
| 7 | 1354 | ,, |
| 8 | 1369 | ,HIJ150, |
| 9 | 1372 | ,DEF64, |
| 10 | 1373 | ,KLM9, |
| 11 | 1374 | ,DEF1, |
| 12 | 1381 | ,, |
| 13 | 1385 | ,, |
| 14 | 1391 | ,, |
| 15 | 1394 | ,, |
| 16 | 1395 | ,, |
| 17 | 1402 | ,, |
| 18 | 1404 | ,, |
| 19 | 1405 | ,, |
| 20 | 1406 | ,, |
| 21 | 1408 | ,, |
| 22 | 1410 | ,HIJ116, |
| 23 | 1412 | ,, |
+-----+-------------------------------+-------------+
因此,我做了以下工作(根据之前的SO答案):
df_sourcing_events = pd.read_csv(wf['local_filename'])
sourcing_events_melt_col = 'Sourcing Event ID (DTRM ID)'
sourcing_events_site_col = 'Site'
print(df_sourcing_events[[sourcing_events_melt_col,sourcing_events_site_col]])
df_sourcing_events[sourcing_events_site_col] = df_sourcing_events[sourcing_events_site_col].str.lstrip(',')
df_sourcing_events[sourcing_events_site_col] = df_sourcing_events[sourcing_events_site_col].str.rstrip(',')
df_sourcing_events_sites = pd.concat([df_sourcing_events[sourcing_events_melt_col], df_sourcing_events[sourcing_events_site_col].str.split(',', expand = True)], axis = 1)\
.melt(id_vars=[sourcing_events_melt_col])\
.sort_values(by = sourcing_events_melt_col)\
.rename(columns = {'value' : sourcing_events_site_col})\
.drop(columns = ['variable'])\
.dropna()
现在您要问自己,为什么要去掉前导和尾随的逗号
因为我有另一个与合同有关的文件,它有相同的精确布局,我对它做了相同的事情,用相同的精确代码解决了问题。我一辈子都无法理解为什么我的代码输出如下:
+-----+-------------------------------+-----------+
| | Sourcing Event ID (DTRM ID) | Site |
+-----+-------------------------------+-----------+
| 0 | 1035 | ABC55 |
| 1 | 1067 | |
| 2 | 1181 | |
| 3 | 1183 | |
| 4 | 1184 | |
| 5 | 1264 | |
| 6 | 1307 | DEF2 |
| 7 | 1354 | |
| 8 | 1369 | HIJ150 |
| 9 | 1372 | DEF64 |
| 10 | 1373 | KLM9 |
| 11 | 1374 | DEF1 |
| 12 | 1381 | |
| 13 | 1385 | |
| 14 | 1391 | |
| 15 | 1394 | |
| 16 | 1395 | |
| 17 | 1402 | |
| 18 | 1404 | |
| 19 | 1405 | |
| 20 | 1406 | |
| 21 | 1408 | |
| 22 | 1410 | HIJ116 |
| 23 | 1412 | |
+-----+-------------------------------+-----------+
好像dropna()根本不起作用。我甚至将其他合同csv中的工作代码复制并粘贴到该区域,并简单地更改代码中的变量以匹配此csv,但仍然无法工作。我重新检查以确保其他代码也能正常工作
我试过了,但没有用。我还应该做什么
编辑:
对扎克人的回答:
否,因为在此之后,我将执行以下操作:
df_sourcing_events_final = df_sourcing_events.drop([sourcing_events_site_col], axis=1)
write_dataframe_to_csv_on_s3(df_sourcing_events_sites, s3_bucket, 'sourcing_events_sites.csv')
write_dataframe_to_csv_on_s3(df_sourcing_events_final, s3_bucket, file_name)
我将列表中的一列拆分为单独的行,并从中生成一个新的csv以加载到一个单独的表中
它不会删除,因为它们是空字符串而不是N/A。尝试:
^{} 只删除“real”
NaN
。但有时csv文件包含被熊猫视为字符串的na。在您的情况下,我认为这些是空字符串""
在任何情况下,^{} 方法都有一个
na_values
参数,您可以用所需的字符串值填充该参数。你可以试试na_values=""
,但我无法预测它的输出相关问题 更多 >
编程相关推荐