【发布时间】:2010-10-14 23:44:09
【问题描述】:
如何删除数据集的列?
有没有一种方法可以像这样为我做到这一点:
rh.dsDetail = ds.Tables[0].Columns.Remove(
或者可能是这样的:
rh.dsDetail = ds.Tables[0].Columns.Remove( ds.Tables[0].Columns[1],ds.Tables[0].Columns[2])
【问题讨论】:
如何删除数据集的列?
有没有一种方法可以像这样为我做到这一点:
rh.dsDetail = ds.Tables[0].Columns.Remove(
或者可能是这样的:
rh.dsDetail = ds.Tables[0].Columns.Remove( ds.Tables[0].Columns[1],ds.Tables[0].Columns[2])
【问题讨论】:
在python中,有一个包叫pandas。
它有一个叫做drop的函数。 pandas.dataframe.drop(labels=None, axis=0, index=None, columns=None, level=None, inplace=False, errors='raise')
在这里,使用要在 labels="column name" 处删除的列的名称。
请参阅 pandas 文档中的更多内容:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.drop.html
【讨论】:
如果您想删除列,因为您有一组新的列名,您可以使用:
DataSet.Reset();
希望对你有帮助。
【讨论】:
我以前在 winforms 和 web 应用程序中都这样做过。您必须反向遍历 DataTable,然后在最后执行 AcceptChanges。这个特定示例很典型,因为它删除了所有 GUID(以“id”结尾的列)。
private void RemoveUselessFields(ref DataTable dtResults)
{
for (int i = dtResults.Columns.Count - 1; i >= 0; i--)
{
DataColumn column = dtResults.Columns[i];
if (column.ColumnName.Substring(column.ColumnName.Length - 2, 2).ToUpper() == "ID")
{
dtResults.Columns.Remove(column);
}
}
dtResults.AcceptChanges();
}
【讨论】:
没有内置方法可以一次删除多个列。如果你愿意,你可以创建一个扩展方法。像这样的:
public static class DataColumnCollectionExtensions
{
public static void RemoveColumns(this DataColumnCollection column, params string[] columns)
{
foreach (string c in columns)
{
column.Remove(c);
}
}
}
然后你可以像这样使用它:
DataTable table1 = ds.Tables[0];
table1.Columns.RemoveColumns("Column1","Column2","Column6");
【讨论】:
没有这样的方法。但是你可以简单地编写自己的 Helpermethod
public static void RemoveColumns(DataTable dt, params DataColumn[] dc)
{
foreach (DataColumn c in dc)
{
dt.Columns.Remove(c);
}
}
RemoveColumns(ds.Tables[0], ds.Tables[0].Columns[1], ds.Tables[0].Columns[2]);
【讨论】:
首先,DataTable 有列,而不是数据集。
如果你想摆脱它们,那么:
table.Columns.Clear();
否则,如果你有索引:
table.Columns.RemoveAt(0);
如果您有列索引,应该可以完成这项工作。请注意,如果您删除第 0 列,则数字将随机排列(因此您可能需要按相反的顺序进行操作)。
或者,您可能希望按名称删除:
table.Columns.Remove("Foo");
【讨论】: