Я считаю, что это ограничение очень раздражает и противоречит общей тенденции не использовать SELECT * в запросах.
Тем не менее с анонимными типами c # существует обходное решение, путем извлечения объектов в анонимного типа, а затем скопируйте его в правильный тип.
Например:
var q = from emp in employees where emp.ID !=0
select new {Name = emp.First + " " + emp.Last, EmployeeId = emp.ID }
var r = q.ToList();
List<User> users = new List<User>(r.Select(new User
{
Name = r.Name,
EmployeeId = r.EmployeeId
}));
И в случае, когда мы имеем дело с одним значением (как в ситуации, описанной в вопросе), это еще проще, и нам просто нужно чтобы скопировать непосредственно значения:
var q = from emp in employees where emp.ID !=0
select new { Name = emp.First + " " + emp.Last, EmployeeId = emp.ID }
var r = q.FirstOrDefault();
User user = new User { Name = r.Name, EmployeeId = r.ID };
Если имя свойства соответствует столбцам базы данных, мы можем сделать это еще проще в запросе, выполнив select
var q = from emp in employees where emp.ID !=0
select new { emp.First, emp.Last, emp.ID }
One может пойти вперед и написать выражение лямбда, которое может автоматически копироваться на основе имени свойства, без необходимости явно указывать значения.
Я считаю, что вам нужно преобразовать индекс в столбец по DataFrame.reset_index
:
#simplify code
df = df.groupby(df.start_date.str.extract("^(.*?)\:", expand=False))['start_date'].count()
numpy_array = df.rename_axis('index').reset_index().values
print (numpy_array)
[['2014-04-15 00' 2]
['2014-04-15 01' 2]
['2014-04-15 02' 1]
['2014-04-15 03' 1]]
Или для панд 0,24+ . Используйте:
numpy_array = df.rename_axis('index').reset_index().to_numpy()